[英]Initialize object properties as class properties first in Python
我習慣在該類的構造函數中初始化該類實例的屬性,但是,如果該屬性與該類關系非常緊密,我也要聲明它們並將它們初始化為None
( []
或其他一些基值)作為類中的屬性。
例如:
class AClass(object):
aprop = None
def __init__(self):
self.aprop = "avalue"
在大多數情況下,這與僅執行以下操作沒有多大區別:
class AClass(object):
def __init__(self):
self.aprop = "avalue"
但是,如果有人獲得了AClass
的范圍,則會注意到該類的實例應具有名為aprop
的屬性。 我認為它是類中aprop
屬性的占位符。
在我看來,這更多是關於樣式的問題,但我想知道這是否是一種好習慣。 你會推薦嗎? 這很常見嗎? 還是我應該嘗試擺脫它?
當您在__init__
函數中執行self.aprop = "avalue"
,由於初始化實例時會調用__init__
,因此AClass
每個實例AClass
將具有aprop
屬性。 這使aprop
成為實例變量 。
當您執行aprop = None
您將一個類變量添加到AClass
。 這意味着類本身將具有此屬性。
例如:
>>> class AClass(object):
... def __init__(self):
... self.aprop = "avalue"
...
>>> AClass.aprop
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'AClass' has no attribute 'aprop'
和:
>>> class AClass(object):
... aprop = None
... def __init__(self):
... self.aprop = "avalue"
...
>>> AClass.aprop
>>> print AClass.aprop
None
因此,如果希望您的類具有此屬性,則應將其定義為類變量。 如果僅在實例中使用它,則應該定義類屬性的唯一情況是,如果不總是在__init__
重新定義(隱藏)它:
class AClass(object):
aprop = None
def __init__(self):
self.bprop = "bvalue"
除非您曾經在類本身(例如,作為AClass.aprop
)而不是在實例上訪問該屬性,否則如果您始終將其填充在__init__
方法的實例上,則無需使其成為類成員。
我的投票是始終編寫最少數量的代碼,以清楚表達意圖。 向類中添加一個額外的成員會掩蓋意圖(因為您的實際目標是將其作為實例屬性),並且沒有必要:這聽起來像是兩次打擊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.