2010-02-09 18 views
6

Po prostu zaczynam trochę mieszać z lekcjami; jednak napotykam problem.Nowicjusz w języku Python, który ma problem z używaniem klas:

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

Dotychczasowy skrypt wraca <unbound method MyClass.f> zamiast zamierzonej wartości. Jak to naprawić?

+3

Co poradnik czytasz? Gdzie widziałeś taki kod? –

+0

Czytałem z podręcznika, jednak było dość niejasne na temat kodu i nie podał prostego przykładu. Więc po prostu bawiłem się i próbowałem coś zrobić. – Pax

Odpowiedz

14

MyClass.f odnosi się do obiektu funkcji f, który jest własnością MyClass. W twoim przypadku f jest metodą instancji (ma własny parametr), więc jest wywoływana w konkretnej instancji. Jest "niezwiązany", ponieważ odnosi się do f bez określania konkretnej klasy, jak w odniesieniu do kierownicy bez samochodu.

Można utworzyć instancję MojaKlasa i nazywają f od niego tak: (. To określa, które instancja zadzwonić f z, więc można odwołać się do zmiennych instancji i tym podobne)

x = MyClass() 
x.f() 

Używasz f jako static method. Te metody nie są związane z konkretną klasą i mogą odwoływać się tylko do ich parametrów.

statycznej metody byłyby tworzone i wykorzystywane w taki sposób:

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

Dzięki za pomoc. – Pax

7

Utwórz instancję klasy: m = MyClass()

następnie użyć m.f() aby wywołać funkcję

Teraz można się zastanawiać, dlaczego nie trzeba przekazać parametr do funkcji (zwany dalej „ja” param). Dzieje się tak dlatego, że instancja, do której wywołujemy tę funkcję, jest faktycznie przekazywana jako pierwszy parametr.

Oznacza to, że MyClass.f(m) jest równy m.f(), gdzie m jest obiektem instancji klasy MyClass.

Powodzenia!

+0

Dzięki za pomoc. – Pax

Powiązane problemy