python类继承影响属性?

2024-09-30 01:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个奇怪的问题。请看我贴在下面的代码。 在我的课堂上我有一个@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__

Tags: 代码属性objectvarmyclasspropertypass基类
2条回答

具有新样式类的@property decoratoronly works properly。在

如果你试过了

class myclass:
    @property     
    def dataf(self): return 1

那么myclass是一个老式的类,所以不要指望@property能正常工作。在

相反,当您使myclass成为mybase的子类,该子类又继承自object,那么您就是在使{}成为一个新样式的类。现在@property工作正常。在

现在,如果希望能够设置属性,则需要定义setter。在

^{pr2}$

收益率

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}

相关问题 更多 >

    热门问题