[英]python class inherit affects property?
我遇到了一个奇怪的问题。 请参阅下面粘贴的代码。 在myclass中,我有一个@property datef。 我可以设置获取属性; 但是当我使myclass从mybase继承时,我无法再设置该属性。 为什么?
class mybase(object):
pass
class myclass(mybase):
@property
def dataf(self): return 1
var = myclass()
print var.dataf
var.dataf = 33
print var.__dict__
您需要定义属性获取器和设置器:
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装饰器仅适用于新样式的类。
如果你尝试过
class myclass:
@property
def dataf(self): return 1
那么myclass
是一个老式的类,因此不要期望@property正常工作。
相反,当您将myclass
mybase
的子类,而mybase
的子类又继承自object
,您使myclass
成为新样式的类。 现在@property可以正常工作。
现在,如果您希望能够设置属性,则需要定义一个setter。
class mybase(object):
pass
class myclass(mybase):
@property
def dataf(self): return 1
@dataf.setter
def dataf(self, value):
self._dataf = value
var = myclass()
print var.dataf
var.dataf = 33
print var.__dict__
产量
1
{'_dataf': 33}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.