Variables de clase cambiantes de Python

Está bien, lo intentaré y seré extremadamente claro esta vez.

class Yes: def __init__(self): self.a=1 def yes(self): if self.a==1: print "Yes" else: print "No, but yes" class No(Yes): def no(self): if self.a==1: print "No" else: print "Yes, but no" self.a-=1 #Note this line 

Ahora, mientras se ejecuta:

 Yes().yes() No().no() Yes().yes() No().no() 

Quiero que se imprima:

 Yes No No, but yes Yes, but no 

Me da:

 Yes No Yes No 

Ahora, sé que la razón es porque solo estoy cambiando el valor de Self.a en la clase No (¿Recuerdas esa línea?). Quiero saber si hay alguna forma de cambiarlo en la clase Sí mientras aún estoy en la clase No (como si hubiera algo que pudiera conectar en lugar del self.a- = 1 que funcionaría).

No estoy seguro de qué uso tiene para esto, pero …

Desea manipular una variable de clase , pero sigue abordando las variables de instancia. Si quieres una variable de clase, usa una variable de clase!

 class Yes: a = 1 # initialize class var. def __init__(self): self.a = 1 # point of this is what? def yes(self): if Yes.a==1: # check class var print "Yes" else: print "No, but yes" class No(Yes): def no(self): if Yes.a==1: # check class var print "No" else: print "Yes, but no" Yes.a-=1 # alter class var 

Parece que lo que quiere usar es una variable estática en lugar de una variable de instancia. Una variable estática se comparte entre todas las instancias de la clase.

 class Yes: a = 1 def __init__(self): pass def yes(self): if Yes.a==1: print "Yes" else: print "No, but yes" class No(Yes): def no(self): if Yes.a==1: print "No" else: print "Yes, but no" Yes.a-=1 #Note this line Yes().yes() No().no() Yes().yes() No().no() 

Saldrá:

 Yes No No, but yes Yes, but no