문제:
다음으로 장식된 클래스 메소드와 함께 property() 함수 사용 @classmethod 데코레이터의 결과는 다음과 같습니다. 오류입니다.
예 재현:
class Foo(object): _var = 5 @classmethod def getvar(cls): return cls._var @classmethod def setvar(cls, value): cls._var = value var = property(getvar, setvar)
오류:
>>> f = Foo() >>> f.getvar() 5 >>> f.setvar(4) >>> f.getvar() 4 >>> f.var Traceback (most recent call last): File <stdin>, line 1, in ? TypeError: 'classmethod' object is not callable >>> f.var=5 Traceback (most recent call last): File <stdin>, line 1, in ? TypeError: 'classmethod' object is not callable
해결책:
Python 3.8 그리고 이후:
Python 3.8 이상에서는 @classmethod 데코레이팅된 함수와 함께 property() 함수를 사용할 수 있습니다. 두 데코레이터를 메서드에 모두 적용하기만 하면 됩니다.
Python 2 및 Python 3(3.9-3.10에서도 작동)
속성은 클래스에 생성되지만 인스턴스에 영향을 줍니다. . 클래스메서드 속성을 생성하려면 메타클래스에 속성을 생성하세요.
class foo(object): _var = 5 class __metaclass__(type): # Python 2 syntax for metaclasses pass @classmethod def getvar(cls): return cls._var @classmethod def setvar(cls, value): cls._var = value
>>> foo.__metaclass__.var = property(foo.getvar.im_func, foo.setvar.im_func) >>> foo.var 5 >>> foo.var = 3 >>> foo.var 3
위 내용은 `@classmethod` 데코레이팅된 메서드와 함께 `property()`를 사용하면 Python에서 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!