[英]Python Classes Best Practices
我想知道在Python中使用OPP /類/實例時,在從到類的屬性/變量進行讀寫時是否應該始終使用getAttr()/ setAttr() 。 還是直接處理變量/屬性(例如self.my_attr =“ some_value”)會是更好的做法?
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
self.my_attr = 'My_Value'
def doSomething(self):
localVariable = self.my_attr
print localVariable
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
self.my_attr = 'My_Value'
def getMyAttr(self):
return self.my_attr
def doSomething(self):
localVariable = self.my_attr
print localVariable
在閱讀《面向對象的思想過程》一書(馬特·韋斯費爾德:開發人員的圖書館)時……作者在其中不斷聲明:
“ ...對對象內屬性的訪問應由對象本身控制,沒有其他對象可以直接更改另一個對象的屬性。”
“ ...如果控制了對屬性的訪問,則在出現問題時,您不必擔心會跟蹤可能已更改屬性的每一段代碼,它只能在一個位置(setter)進行更改。 ...”
那時我將堅持二傳手。 在這里建議/提及的Python的@property和@ .setter使它變得更加容易。
您應該直接訪問變量。
如果隨后需要添加一些用於獲取/設置值的邏輯,請將其轉換為property
。
代替后一個示例,請考慮使用@property
裝飾器。
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
self.__my_attr = 'My_Value'
@property
def my_attr(self):
return self.__my_attr
def doSomething(self):
localVariable = self.__my_attr
print localVariable
僅當您有充分的理由保護成員(例如,要驗證其值)時才使用它:
class Person:
@property
def age(self): return self.__age
@age.setter
def age(self, value):
if value < 0: raise Exception('Age out of bounds.')
self.__age = value
p = Person ()
p.age = 14
print (p.age)
p.age = -34
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.