programacion orientada objetos markercluster importar has error ejemplos clases attribute python class attributes

python - orientada - nonetype object has no attribute



AttributeError: el objeto ''Class'' no tiene atributo ''a'' (2)

Una instancia recién creada de Class no tiene atributo a cuando realiza instance_of_class.method_2() sin llamar a method_1 , como en su ejemplo.

Considere esta versión ligeramente alterada de su código:

class CreateNewClassInstance(object): def create_a(self): self.a = 1 def add_one_to_a(self): self.a += 1 CreateNewClassInstance().create_a() CreateNewClassInstance().add_one_to_a()

Cada vez que llamas a Class() (o CreateNewClassInstance() ) creas un nuevo objeto, con su propio atributo a . Hasta que inicialice a , no tiene un atributo con ese nombre.

La mayoría de las veces esto no es un problema, sin embargo, += intentará cargar self.a antes de agregarle uno, que es lo que está causando su AttributeError en este caso.

Aquí tengo un atributo ''a'', que se define en el método de primera clase y debe cambiarse en el segundo. Al llamarlos por orden, aparece este mensaje:

AttributeError: el objeto ''Class'' no tiene atributo ''a''

La única forma que he encontrado es definir "a" nuevamente en el segundo método, pero en el código real tiene una larga herencia y la aplicación se arruinará. ¿Por qué no funciona? ¿ Self.a no es igual a Class.a ?

class Class(object): def method_1(self): self.a = 1 def method_2(self): self.a += 1 Class().method_1() Class().method_2()


Respuesta corta, no. El problema con tu código es que cada vez que creas una nueva instancia.

Editar : Como abarca a continuación, hay una gran diferencia entre Class.a y ca Los atributos de instancia (el segundo caso) pertenecen a cada objeto específico, mientras que los atributos de clase pertenecen a la clase. Mira el comentario de abarnert a continuación o la discusión aquí para más información.

Tu código es equivalente a

c1 = Class() c1.method_1() # defines c1.a (an instance attribute) c2 = Class() c2.method_2() # c2.a undefined (the c2 instance doesn''t have the attribute)

Probablemente quieras hacer algo así como

c = Class() c.method_1() # c.a = 1 c.method_2() # c.a = 2 print "c.a is %d" % c.a # prints "c.a is 2"

O probablemente sería aún mejor inicializar c con un atributo a

class Class: def __init__(self): self.a = 1 # all instances will have their own a attribute