2010-02-09 20 views
6

Sto appena cominciando a scherzare un po 'con le classi; tuttavia, sto attraversando un problema.Principiante di Python che ha un problema con le classi

class MyClass(object): 
    def f(self): 
     return 'hello world' 
print MyClass.f 

Lo script precedente sta tornando <unbound method MyClass.f> invece del valore previsto. Come posso risolvere questo?

+3

Cosa esercitazione stai leggendo? Dove hai visto il codice come questo? –

+0

Stavo leggendo da un libro di testo, tuttavia, era piuttosto vago riguardo al codice e non forniva un semplice esempio. Così mi sono messo a trafficare e ho cercato di far funzionare qualcosa. – Pax

risposta

14

MyClass.f fa riferimento all'oggetto funzione f che è una proprietà di MyClass. Nel tuo caso, f è un metodo di istanza (ha un parametro self) quindi è chiamato su una particolare istanza. È "non legato" perché ti stai riferendo a f senza specificare una classe specifica, un po 'come riferirsi a un volante senza una macchina.

È possibile creare un'istanza di MyClass e chiamare f da esso in questo modo: (. Questo specifica quale istanza per chiamare f da, in modo da poter fare riferimento a variabili di istanza e simili)

x = MyClass() 
x.f() 

Stai utilizzando f come static method. Questi metodi non sono associati a una particolare classe e possono solo fare riferimento ai loro parametri.

un metodo statico sarebbe stato creato e utilizzato in questo modo:

class MyClass(object): 
    def f():     #no self parameter 
     return 'hello world' 
print MyClass.f() 
+0

Grazie per l'aiuto. – Pax

7

Creare un'istanza della classe: m = MyClass()

quindi utilizzare m.f() per chiamare la funzione

Ora si potrebbe chiedere perché non si dispone di passare un parametro alla funzione (il parametro 'sé'). È perché l'istanza su cui viene chiamata la funzione viene effettivamente passata come primo parametro.

Vale a dire, MyClass.f(m) equivale a m.f(), dove m è un oggetto istanza della classe MyClass.

Buona fortuna!

+0

Grazie per l'aiuto. – Pax

Problemi correlati