2011-11-28 18 views
20

Así que he leído que se supone que se debe acceder a los atributos del objeto a través de métodos getter/setter como object.get_this() o object.set_that(value). ¿Este código es válido para los métodos que también están definidos dentro de la clase? O solo están destinados a ser utilizados con instancias de objetos. Por ejemplo, es idiomática para hacerlo de esta manera,OOP: métodos 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) 

con get_value() definido para acceder value para una instancia de objeto, o debería get_value() también se pueden utilizar dentro de los métodos de clase?

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

Compruebe la función incorporada 'property': http://docs.python.org/library/functions.html#property – eumiro

+3

No sé dónde ha leído esto, pero apuesto a que no estaba en ningún contexto de Python En Python, lo opuesto es verdad. –

Respuesta

46

En python do not use getter/setter methods. En su lugar, simplemente acceda al atributo en sí o, si necesita que se ejecute el código cada vez que se acceda o establezca el atributo, use properties.

+19

+1 Razón adicional para hacer eso: [Python no es Java] (http://dirtsimple.org/2004/12/python-is-not-java.html) – Tadeck

+5

+1 @Tadeck algo muy importante "Python no es Java" – BlaShadow

2

No accedería a los atributos de un objeto en los métodos de dicho objeto de una manera diferente a la que esperaría que los métodos de otros objetos para acceder a ellos. ¿Por qué? No estoy seguro, parece muy raro.

Python lo hace realmente fácil si usa el properties decorator que elimina la necesidad de getters/setters nombrados como "get_foo"/"set_foo".