問題:
在類別方法中使用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 及更高版本中,可以將 property() 函數與 @classmethod 修飾函數一起使用。只需將兩個裝飾器應用於方法即可。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
以上是為什麼在 Python 中使用「property()」和「@classmethod」修飾方法會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!