내가 틀렸다고 생각하는 이유를 설명하지 않고 "내가 무엇을 잘못하고 있는지"묻는 것이 일반적으로 도움이되지 않습니다.
그러나 코드에 두 가지 문제가 있습니다. 모든 블록 도입 문장처럼, 콜론이 필요
def get_grade(self)
def
문을, 그리고 당신이없는 :
첫째, 당신은이 라인에 SyntaxError
을받을거야.
다음으로 코드를 수정하면 코드가 컴파일되지만 3.x를 사용하는 경우 코드가 제대로 작동하지 않습니다. Python 2.x 또는 3.x를 사용하는지 여부는 명확하지 않지만 3.x이면 메타 클래스를 지정하지 않고 그냥 아무것도하지 않는 __metaclass__
이라는 클래스 변수를 작성하는 것입니다. 또한 2.x를 사용하는 경우 클래스는 클래식 클래스로 정의되지만 본문이 메타 클래스로 평가 될 때 새로운 스타일 클래스가되므로 혼란 스럽습니다.
class Assessment(object):
__metaclass__ = ABCMeta
@abstractmethod
def get_grade(self):
return
그리고 올바른 3.X 버전은 다음과 같습니다 : 코드의 올바른 2.X 버전입니다
class Assessment(metaclass=ABCMeta):
@abstractmethod
def get_grade(self):
return
당신은 당신의 코드가 작동하는 것을 해결되면. 물론
>>> a = Assessment()
TypeError: Can't instantiate abstract class Assessment with abstract methods get_grade
>>> class Concrete(Assessment): pass
>>> b = Concrete()
TypeError: Can't instantiate abstract class B with abstract methods get_grade
>>> class Concrete2(Assessment):
... def get_grade(self): pass
>>> c = Concrete2()
>>> class External(object):
... def get_grade(self): pass
>>> Assessment.register(External)
>>> d = External()
이 당신의 할당의 시작이다 : 그것은 당신이 쉽게 테스트 할 수 있습니다 추상적 인 방법으로 추상 클래스를 만듭니다. get_grade
에서 유용하게 사용되는 Assessment
(또는 Assessment.register
이라고 부르는 클래스) 중 적어도 하나의 구체적인 하위 클래스를 만드는 것이 분명합니다.
다음은 "4.0 배율로 값을 반환하는"하위 클래스의 예입니다. 당신이 당신의 지정을 위해 어떻게해야하는지와 같은 아무것도 있다면 나는 모든 당신이 우리에게 준 때문에
class PopQuiz(Assessment):
def __init__(self, score_out_of_100):
self.score_out_of_100 = score_out_of_100
def get_grade(self):
score_out_of_4_0 = self.score_out_of_100/25.0
return score_out_of_4_0
첫째, 왜이'파이썬 2.7 태그 한 한 구절,하지만 ...이다, 아무 생각이 없다 '와'python-3.x'가 있습니다. 무엇 이니? 그리고 실제로 문제와 관련된 wxpython이나 PIL을 사용하고 있습니까? – abarnert
어쨌든, 당신이 잘못하고있는 첫 번째 일은'def' 명령문에 콜론이 없다는 것입니다. 즉,'SyntaxError'를 얻을 수 있습니다. 두 번째로 잘못된 것은 metaclass를 잘못 지정하고 (3.x를 사용하는 경우) 또는 고전 클래스를 ABC로 사용하려고 시도하는 것입니다 (2.x 인 경우). – abarnert
이러한 문제를 해결하면 잘못 처리하지 않을 것입니다. 그것은 모두 예상대로 작동합니다. 즉,'get_grade'를 구현하는 적어도 하나의 구체적인 서브 클래스를 정의하지 않는 한 아무런 도움이되지 않습니다. – abarnert