2010-07-24 7 views
7

Je travaille actuellement avec Python pendant un moment et j'en suis arrivé au point où je me suis demandé si je devrais utiliser "Propriétés" en Python aussi souvent qu'en C#. En C#, j'ai surtout créé des propriétés pour la majorité de mes classes.Utilisation des propriétés en python comme dans l'exemple C#

Il semble que les propriétés ne sont pas si populaires en python, ai-je tort? Comment utiliser les propriétés en Python?

salutations,

Répondre

10

Les propriétés sont souvent pas nécessaire si tout ce que vous faites est défini et les variables membres de la requête. Parce que Python n'a pas de concept d'encapsulation, toutes les variables membres sont publiques et il n'est souvent pas nécessaire d'encapsuler les accès. Cependant, les propriétés sont possibles, parfaitement légitime et populaire:

class C(object): 
    def __init__(self): 
     self._x = 0 

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

    @x.setter 
    def x(self, value): 
     if value <= 0: 
      raise ValueError("Value must be positive") 
     self._x = value 

o = C() 
print o.x 
o.x = 5 
print o.x 
o.x = -2 
7

Je vous recommande de lire ce, même Adressé Java progrmamers: Python Is Not Java

+0

+1 Cela vaut la peine d'être lu. – volting

2

Si vous faites un public d'attribut en C#, puis plus tard besoin de changer dans une propriété, vous devez également recompiler tout le code qui utilise la classe d'origine. C'est mauvais, alors faites des attributs publics dans les propriétés dès le premier jour 'juste au cas où'.

Si vous avez un attribut qui est utilisé à partir d'un autre code, vous devez ensuite le changer en propriété, puis le modifier et rien d'autre ne doit se produire. Utilisez donc des attributs ordinaires jusqu'à ce que vous trouviez que vous avez besoin de quelque chose de plus compliqué.