2024-09-30 01:21:21 发布
网友
我遇到了一个奇怪的问题。请看我贴在下面的代码。 在我的课堂上我有一个@property datef。 我可以设定得到财产; 从我的基类继承而来, 我不能再设置属性了。 为什么?在
class mybase(object): pass class myclass(mybase): @property def dataf(self): return 1 var = myclass() print var.dataf var.dataf = 33 print var.__dict__
具有新样式类的@property decoratoronly works properly。在
如果你试过了
class myclass: @property def dataf(self): return 1
那么myclass是一个老式的类,所以不要指望@property能正常工作。在
myclass
相反,当您使myclass成为mybase的子类,该子类又继承自object,那么您就是在使{}成为一个新样式的类。现在@property工作正常。在
mybase
object
现在,如果希望能够设置属性,则需要定义setter。在
收益率
1 {'_dataf': 33}
需要定义getter和setter属性:
class mybase(object): pass class myclass(mybase): def dataf_get(self): return getattr(self, "_data_f", None) def dataf_set(self, value): self._data_f = value dataf = property(dataf_get, dataf_set) var = myclass() print var.dataf >> None var.dataf = 33 print var.dataf >> 33 print var.__dict__ >> {'_data_f': 33}
具有新样式类的@property decoratoronly works properly。在
如果你试过了
那么
myclass
是一个老式的类,所以不要指望@property能正常工作。在相反,当您使}成为一个新样式的类。现在@property工作正常。在
myclass
成为mybase
的子类,该子类又继承自object
,那么您就是在使{现在,如果希望能够设置属性,则需要定义setter。在
^{pr2}$收益率
需要定义getter和setter属性:
相关问题 更多 >
编程相关推荐