2010-10-20 23 views
0

J'ai une classe/un objet python comme suit.Comment vérifier les valeurs dans une instance avec Python?

class Hello: 
    def __init__(self): 
     self.x = None 
     self.y = None 
     self.z = None 


h = Hello() 
h.x = 10 
h.y = 20 
# h.z is not set 

Je dois vérifier si toutes les variables membres sont définies (pas None). Comment puis-je faire cela automatiquement?

for value in ??memeber variables in h??: 
    if value == None: 
     print 'value is not set' 
+4

Vous n'en avez pas. Vous écrivez la classe d'une manière qui ne peut pas la laisser non initialisée (à moins que quelqu'un ne soit vraiment hors de votre * et * leur code, bien sûr). – delnan

Répondre

3
class Hello(object): 
    def __init__(self): 
     self.x = None 
     self.y = None 
     self.z = None 
    def is_all_set(self): 
     return all(getattr(self, attr) is not None for attr in self.__dict__) 

cependant, comme @delnan dit, vous devriez préférer le rendre impossible pour la classe d'être toujours dans un état valide (ce qui est appelé la préservation de « invariants de classe »)

0

Je dois vérifier si toutes les variables membres sont définies (pas None).

Pourquoi?

Vous avez besoin des variables membres pour effectuer un traitement dans la classe.

class Hello: 
    def __init__(self): 
     self.x = None 
     self.y = None 
     self.z = None 
    def some_processing(self): 
     assert all(self.x is not None, self.y is not None, self.z is not None) 
     # Now do the processing.