2011-11-28 59 views
20

所以我讀過你應該通過像object.get_this()object.set_that(value)這樣的getter/setter方法來訪問對象屬性。此代碼是否適用於在該類中定義的方法?或者它們只能用於對象實例。比如,是不是習慣去做這樣,OOP:getter/setter方法

class test: 
    def __init__(self,value): 
     self.value = value 
    def get_value(self): 
     return self.value 
    def method(self): 
     return some_operation(self.value) 

get_value()訪問value對象實例定義,還是應該get_value()也類方法中使用?

class test: 
    def __init__(self,value): 
     self.value = value 
    def get_value(self): 
     return self.value 
    def method(self): 
     return some_operation(self.get_value()) 
+4

檢查「property」內置函數:http://docs.python.org/library/functions.html#property – eumiro

+3

我不知道你在哪裏讀過這個,但我敢打賭不在任何Python上下文中。在Python中,情況正好相反。 –

回答

46

在python do not use getter/setter methods。相反,只需訪問屬性本身,或者如果您需要在每次訪問或設置屬性時運行代碼,請使用properties

+19

+1這樣做的其他原因:[Python不是Java](http://dirtsimple.org/2004/12/python-is-not-java.html) – Tadeck

+5

+1 @Tadeck非常重要的事情「Python不是java的」 – BlaShadow

2

我不會以不同於我期望來自其他對象的方法來訪問它們的方式來訪問所述對象的方法中的對象的屬性。爲什麼?我不確定,這似乎很奇怪。

如果您使用properties decorator,Python使得這非常簡單,因爲它不需要名爲「get_foo」/「set_foo」的getter/setter。