2014-02-14 70 views
0

它與Python類的工作,而這是完全可能與getMyAttr()和​​的方法來獲取相同的功能,而不是聲明類屬性/變量的多次出現,如self.myVariablePython:類屬性VS Getters和Setters?

我OOP的工作越多,我越趨向使用類方法來獲取和設置屬性。 我想知道我正在採取的方向是否正確,如果我不會後悔10K行代碼。請指教!

+0

爲什麼要使用getters/setters而不是直接訪問屬性? – BrenBarn

+3

根據具體情況,您應該使用直接訪問和「@屬性」的混合模式。由於某種原因,它們在語法上可以互換。 – roippi

回答

5

你在想在正確的方向,但你應該尋找的Python properties做你正在做的事情:

class Foo(): 
    def __init__(self, x): 
    self.__x = x 

    @property 
    def x(self): 
    return self.__x 

    @x.setter 
    def set_x(self, value): 
    if(value < 0): 
     self.__x = value 

其中,你可以窩「設置」邏輯和「得到」的邏輯(如果您正在更改如何呈現它)。這會讓您從類中調用值x,就好像您在訪問屬性一樣。

foo = Foo(-4) 
    foo.x 
    >>> -4 
    foo.x = 3 
    foo.x 
    >>> -4 
    foo.x = -12 
    foo.x 
    >>> -12