2011-11-28 17 views
20

Quindi ho letto che si suppone di accedere agli attributi dell'oggetto tramite metodi getter/setter come object.get_this() o object.set_that(value). Questo codice vale per i metodi che sono anche definiti all'interno della classe? Oppure sono pensati solo per essere usati con istanze di oggetti. Ad esempio, è idiomatica di farlo in questo modo,OOP: metodi 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() definita per l'accesso value data un'istanza, o dovrebbe get_value() essere utilizzato anche all'interno di metodi di classe?

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

Controllare la funzione built-in 'property': http://docs.python.org/library/functions.html#property – eumiro

+3

Non so dove hai letto questo, ma ci scommetterò non era in alcun contesto Python. In Python, è vero il contrario. –

risposta

46

In pitone do not use getter/setter methods. È sufficiente accedere semplicemente all'attributo stesso oppure, se è necessario eseguire il codice ogni volta che si accede o si imposta l'attributo, utilizzare properties.

+19

+1 Motivo aggiuntivo per farlo: [Python non è Java] (http://dirtsimple.org/2004/12/python-is-not-java.html) – Tadeck

+5

+1 @Tadeck cosa molto importante "Python non è Giava" – BlaShadow

2

Non avrei accesso agli attributi di un oggetto nei metodi di detto oggetto da un modo diverso da quello che mi aspetterei dai metodi da altri oggetti per accedervi. Perché? Non sono sicuro, sembra solo molto strano.

Python rende questo molto facile se si utilizza lo properties decorator che elimina la necessità di getter/setter denominati come "get_foo"/"set_foo".