2014-03-31 1 views
3

PyCharm (커뮤니티 3.1.1)과 밀접하게 관련된 특정 문제가 있습니다. 다음의 간단한 예제는 이것을 보여줍니다. 코드를 입력하는 대신 PyCharm의 스크린 샷을 사용합니다. 이유는 곧 명확해질 것입니다. 파이썬 구현되지 않은 메서드 대 추상 메서드는 파이썬이 더 깁니까? PyCharm은 기본 클래스에서 구현되지 않은 메소드를 좋아하지 않습니다.

당신이 볼 수 있듯이

self.say_hello()에 대한 호출이 PyCharm에 의해 노란색으로 강조되며, say_hello()Base 클래스에서 구현되지 않기 때문에 아마도이입니다. 사실 say_hello()이 기본 클래스에서 구현되지 않았다는 것은 의도적 인 것입니다. 왜냐하면 Base의 인스턴스가 say_hello()을 호출 할 수 없으므로 (따라서 hello()을 호출하면 안 됨) 일종의 "추상"효과가 필요하기 때문입니다. Child의 인스턴스는 hello() ( Base 클래스로 구현 됨)을 호출 할 수 있습니다. PyCharm을 불평하지 않고이 "추상"효과를 얻으려면 어떻게해야합니까?

here에서 알았 듯이 abc 모듈을 사용할 수 있습니다. 그러나 그것은 나에게 다소 성가신 일이 될 것이고 다소 평범하지는 않을 것입니다. 당신의 추천은 무엇입니까?

+0

추상적 인 방법을 사용하는 것이 유일한 해결책입니다. – Cthulhu

답변

7

나는 그루터기로 say_hello()을 구현하는 것이 : 만 넣어

또는
class Base(object): 
    # ...as above... 

    def say_hello(self): 
     raise NotImplementedError 

say_hello()의 본문에 전달합니다.

obj.hello()을 호출 할 때 AttributeError가 발생하기 전에 클래스의 사용자에게 say_hello()을 구현해야한다고 알립니다. 예외를 발생 시킬지 또는 pass을 발생 시킬지는 아무 것도하지 않는 것이 적절한 기본 동작인지 여부에 따라 다릅니다. 사용자가 자신의 메서드를 제공해야하는 경우 예외를 발생시킵니다.

관련 문제