2009-09-28 3 views
2

je rédigeais des cours de python l'autre jour, et a créé une classe comme ceci:Pratique exemplaire: Données abstraites via get/set ou autoriser l'accès à la variable?

class Option: 
    Name = "" 
    Description = "" 
    Criteria = {} 

    def __init__(self, name, descr): 
     self.Name = name 
     self.Description = descr 

    def addCriteria(self, cname, ctype): 
     ... 

Dans mon programme, j'accédait aux données dans la classe directement, à savoir:

cname = opt.Name 

Bien que ce fut une décision consciente, je sais que beaucoup de classes aurait abstraire ce que:

cname = opt.getName() 

aurais-je pris le temps de toutes les données abstraites et pas tous Comment accéder directement? Qu'est-ce qui déclenche l'ajout de méthodes d'accès aux données de classe?

Mike

Répondre

4

Même si cela va contre tout ce que vous apprenez lorsque vous faites POO, je suggère que vous différez la décision jusqu'à ce qu'il devienne vraiment, que vous avez besoin de « magie » avoir lieu sur l'accès attribut. En Python, il est assez facile de factoriser la classe fournissant les attributs à l'aide de la fonction property spéciale:.

class ItsMagic(object): 

    _name = None 

    def _get_name(self): 
     return self._name 

    def _set_name(self, new_name): 
     self._name = new_name 

    Name = property(_get_name, _set_name) 


magic = ItsMagic() 
magic.Name = "Foo" 

Ceci est transparent pour les clients de cette classe, par exemple, ils ne peuvent pas dire en général (et ne doivent pas prendre soin) , si la référence de la propriété est gérée en fournissant un accès à l'attribut réel de l'objet ou au moyen de fonctions getter/setter magiques, et elle peut être appliquée plus tard (si cela s'avère nécessaire).

Questions connexes