簡體   English   中英

python類繼承會影響屬性嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM