2010-02-09 23 views
6

Ich fange gerade an, ein bisschen mit Klassen herumzumachen; Ich laufe jedoch auf ein Problem.Python-Neuling mit Klassenproblemen

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

Das vorherige Skript <unbound method MyClass.f> anstelle des beabsichtigten Wert zurückkehrt. Wie behebe ich das?

+3

Welche Tutorial lesen Sie? Wo hast du Code wie diesen gesehen? –

+0

Ich las aus einem Lehrbuch, aber es war ziemlich vage über den Code und bot kein einfaches Beispiel. Also habe ich nur herumgespielt und versucht, etwas zur Arbeit zu bringen. – Pax

Antwort

14

MyClass.f bezieht sich auf das Funktionsobjekt f, das eine Eigenschaft von MyClass ist. In Ihrem Fall ist f eine Instanzmethode (hat einen Selbstparameter), so dass sie für eine bestimmte Instanz aufgerufen wird. Es ist "ungebunden", weil Sie sich auf f beziehen, ohne eine bestimmte Klasse zu spezifizieren, eine Art von Bezug auf ein Lenkrad ohne Auto.

Sie können eine Instanz von MyClass erstellen und nennen f daraus wie folgt: (. Dies gibt an, welche Instanz f aus anrufen, so dass Sie Instanzvariablen und dergleichen beziehen)

x = MyClass() 
x.f() 

Sie verwenden f als static method. Diese Methoden sind nicht an eine bestimmte Klasse gebunden und können nur auf ihre Parameter verweisen.

Eine statische Methode würde erstellt und wie so verwendet werden:

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

Danke für die Hilfe. – Pax

7

eine Instanz der Klasse erstellen: m = MyClass()

dann m.f() verwenden, um die Funktion aufzurufen

Jetzt fragen Sie sich vielleicht, warum Sie keinen Parameter an die Funktion übergeben müssen (das ‚Selbst‘ param). Dies liegt daran, dass die Instanz, in der Sie die Funktion aufrufen, tatsächlich als erster Parameter übergeben wird.

Das heißt, MyClass.f(m) entspricht m.f(), wobei m ein Instanzobjekt der Klasse MyClass ist.

Viel Glück!

+0

Danke für die Hilfe. – Pax