La respuesta, en pocas palabras
En su ejemplo, itsProblem
es una variable local.
Debe usar self
para establecer y obtener variables de instancia. Puede configurarlo en el método __init__
. A continuación, el código sería:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Pero si quieres una verdadera variable de clase, a continuación, utilizar el nombre de clase directamente:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)
Pero tenga cuidado con esto, ya que theExample.itsProblem
se ajusta automáticamente para que sea igual a Example.itsProblem
, pero no es la misma variable y puede cambiarse independientemente.
Algunas explicaciones
En Python, las variables coche pueden crear de forma dinámica. Para ello, puede hacer lo siguiente:
class Example(object):
pass
Example.itsProblem = "problem"
e = Example()
e.itsSecondProblem = "problem"
print Example.itsProblem == e.itsSecondProblem
imprime
verdaderos
Por lo tanto, eso es exactamente lo que haces con los ejemplos anteriores.
De hecho, en Python usamos self
como this
, pero es un poco más que eso. Self
es el primer argumento para cualquier método de objeto porque el primer argumento es siempre la referencia del objeto. Esto es automático, ya sea que lo llame o no.
Lo que significa que puede hacer:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
O:
class Example(object):
def __init__(my_super_self):
my_super_self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Es exactamente lo mismo. El primer argumento de CUALQUIER método de objeto es el objeto actual, solo lo llamamos self
como una convención. Y agrega solo una variable a este objeto, de la misma manera que lo haría desde afuera.
Ahora, sobre las variables de clase.
Al hacer:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Se dará cuenta de que primero establecemos una clase variable de, a continuación, accedemos un objeto (instancia) Variable. Nunca establecemos esta variable de objeto pero funciona, ¿cómo es posible?
Bueno, Python intenta obtener primero la variable de objeto, pero si no puede encontrarla, le dará la variable de clase. Advertencia: la variable de clase se comparte entre instancias y la variable de objeto no.
Como conclusión, nunca utilice variables de clase para establecer los valores predeterminados de las variables del objeto. Use __init__
para eso.
Eventualmente, aprenderá que las clases de Python son instancias y, por lo tanto, objetos en sí mismos, lo que brinda una nueva comprensión para comprender lo anterior. Vuelve y vuelve a leer esto más tarde, una vez que te des cuenta de eso.
título editado, pregunta en realidad acerca de las variables de clase "estáticos": http://stackoverflow.com/questions/707380/in-python-how-can-i-access- static-class-variables-within-class-methods –