簡體   English   中英

Python類最佳實踐

[英]Python Classes Best Practices

我想知道在Python中使用OPP /類/實例時,在從到類的屬性/變量進行讀寫時是否應該始終使用getAttr()/ setAttr() 還是直接處理變量/屬性(例如self.my_attr =“ some_value”)會是更好的做法?

直接訪問Class attr

class MyClass(object):
    def __init__(self):
        super(MyClass, self).__init__()
        self.my_attr = 'My_Value'

    def doSomething(self):
        localVariable = self.my_attr
        print localVariable

使用類的方法訪問類的attr

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.

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