我的問題很簡單:如何添加屬性和setter到classmethod?如何在classmethod上應用屬性?
這裏是我的代碼:
class Ingredient():
__max_stock = 100
__stock = 0
__prix = 0
def __init__(self):
pass
@classmethod
@property
def prix(cls):
return cls.__prix
@classmethod
@prix.setter
def prix(cls, value):
assert isinstance(value, int) and int(abs(value)) == value
cls.__prix = value
Ingredient.prix = 10 #should be OK
Ingredient.prix = 'text' #should raise an error
Ingredient.prix = 10.5 #should raise an error too
問題是,當該變種是一個類變量的setter不起作用。 這裏是我的錯誤:
AttributeError: 'classmethod' object has no attribute 'setter'
我使用Python 3.x的
它是否必須是'classmethod'?爲什麼不只有一個默認值傳遞給構造函數,您可以在需要時進行更改? –
我不確定'財產'和'classmethod'是否打算*一起工作 – chepner
首先,最重要的是,感謝您對我的代碼進行了美化。 其次,我想保持classmethod的原因是價格是所有成分通用的。所以當我想改變價格時,所有的實例都會有一個更新的價格(以及stock和max_stock等) –