La risposta, in poche parole
Nella tua esempio, itsProblem
è una variabile locale.
È necessario utilizzare self
per impostare e ottenere variabili di istanza. È possibile impostarlo nel metodo __init__
. Allora il vostro codice sarebbe:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Ma se si vuole una variabile di classe vera, quindi utilizzare il nome della classe direttamente:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)
Ma attenzione con questo, come theExample.itsProblem
è impostato automaticamente per essere uguale a Example.itsProblem
, ma non è la stessa variabile e può essere modificata indipendentemente.
Alcune spiegazioni
In Python, le variabili auto essere create dinamicamente. Perciò, è possibile effettuare le seguenti operazioni:
class Example(object):
pass
Example.itsProblem = "problem"
e = Example()
e.itsSecondProblem = "problem"
print Example.itsProblem == e.itsSecondProblem
Stampe
veri
Pertanto, questo è esattamente ciò che si fa con gli esempi precedenti.
Infatti, in Python usiamo self
come this
, ma è un po 'di più. Self
è il primo argomento di qualsiasi metodo oggetto poiché il primo argomento è sempre il riferimento all'oggetto. Questo è automatico, che tu lo chiami o meno.
Il che significa che si può fare:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Oppure:
class Example(object):
def __init__(my_super_self):
my_super_self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
E 'esattamente la stessa cosa. Il primo argomento di QUALSIASI metodo di oggetto è l'oggetto corrente, lo chiamiamo solo come convenzione self
. E aggiungi solo una variabile a questo oggetto, nello stesso modo in cui lo faresti dall'esterno.
Ora, sulle variabili di classe.
Quando si esegue:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Si noterà per prima cosa impostiamo una classe variabile, quindi accediamo un oggetto (esempio) variabili. Non impostiamo mai questa variabile oggetto ma funziona, com'è possibile?
Bene, Python prova ad ottenere prima la variabile oggetto, ma se non riesce a trovarla, ti darà la variabile di classe. Attenzione: la variabile di classe è condivisa tra le istanze e la variabile oggetto non lo è.
In conclusione, non utilizzare mai le variabili di classe per impostare valori predefiniti per le variabili oggetto. Utilizzare __init__
per quello.
Alla fine, imparerai che le classi Python sono istanze e quindi oggetti stessi, il che fornisce nuove informazioni per comprendere quanto sopra. Torna indietro e leggi di nuovo più tardi, una volta che te ne rendi conto.
titolo modificato, domanda in realtà circa classe variabili "statiche": http://stackoverflow.com/questions/707380/in-python-how-can-i-access- static-class-variables-within-class-methods –