W Pythonie próbuję uruchomić metodę w klasie i pojawia się błąd:
Traceback (most recent call last):
File "C:\Users\domenico\Desktop\py\main.py", line 8, in <module>
fibo.f()
TypeError: unbound method f() must be called with fibo instance
as first argument (got nothing instead)
Kod: (swineflu.py)
class fibo:
a=0
b=0
def f(self,a=0):
print fibo.b+a
b=a;
return self(a+1)
Skrypt main.py
import swineflu
f = swineflu
fibo = f.fibo
fibo.f() #TypeError is thrown here
Co oznacza ten błąd? Co powoduje ten błąd?
fibo = f.fibo()
Musisz umieścić klasę w nawiasach.fibo().f()
Odpowiedzi:
OK, po pierwsze, nie musisz pobierać odwołania do modułu pod inną nazwą; masz już odniesienie (z
import
) i możesz go po prostu użyć. Jeśli chcesz mieć inną nazwę, po prostu użyjimport swineflu as f
.Po drugie, zamiast tworzyć instancję klasy, otrzymujesz odwołanie do klasy.
Więc to powinno być:
Związany sposób to taki, który jest zamocowany na przykład obiektu. Niezwiązanego sposób jest oczywiście taki, który jest nie przyłączony do przypadku. Ten błąd zwykle oznacza, że wywołujesz metodę na klasie, a nie na instancji, co jest dokładnie tym, co działo się w tym przypadku, ponieważ nie utworzyłeś instancji klasy.
źródło
swineflu.fibo().f()
jeśli dzwonisz tylko raz.Jak odtworzyć ten błąd z jak najmniejszą liczbą wierszy:
Nie udaje się z powodu TypeError, ponieważ najpierw nie utworzyłeś instancji klasy, masz dwie możliwości: 1: albo uczyń metodę statyczną, aby można było ją uruchomić w sposób statyczny, lub 2: utwórz instancję klasy, aby mieć instancję do pobrania na, aby uruchomić metodę.
Wygląda na to, że chcesz uruchomić metodę w sposób statyczny, wykonaj następujące czynności:
Lub prawdopodobnie chodziło Ci o użycie instancji, której instancja została utworzona w następujący sposób:
Jeśli to cię zmyli, zadaj następujące pytania:
źródło
fibo = f.fibo
odwołuje się do samej klasy. Prawdopodobnie chciałeśfibo = f.fibo()
(zwróć uwagę na nawiasy), aby utworzyć instancję klasy, po czymfibo.f()
powinna się powieść.f.fibo.f()
zawodzi, ponieważ zasadniczo dzwoniszf(self, a=0)
bez dostarczaniaself
;self
jest "wiązany" automatycznie, gdy masz instancję klasy.źródło
f
jest metodą (instancji). Jednak wywołujesz go przezfibo.f
, gdziefibo
jest obiektem klasy. W związku z tymf
jest niezwiązany (nie jest powiązany z żadną instancją klasy).Jeśli tak
wtedy to
f
jest związane (z instancjąa
).źródło
Oto dobry samouczek ułatwiający rozpoczęcie zajęć w Pythonie.
źródło
W Pythonie 2 (3 ma inną składnię):
Co się stanie, jeśli nie możesz utworzyć instancji klasy Parent, zanim będziesz musiał wywołać jedną z jej metod?
Służy
super(ChildClass, self).method()
do uzyskiwania dostępu do metod nadrzędnych.źródło
Różnice w wersji Pythona 2 i 3:
Jeśli masz już domyślną metodę w klasie o tej samej nazwie i ponownie zadeklarujesz ją jako tę samą nazwę, pojawi się ona jako niezwiązane wywołanie metody tej instancji klasy, gdy chcesz ją utworzyć.
Jeśli potrzebujesz metod klasowych, ale zamiast tego zadeklarowałeś je jako metody instancji.
Metoda instancji to metoda używana podczas tworzenia instancji klasy.
Przykładem może być
Metoda etykiety klas:
W wersji Pythona 2 i 3 różnią się klasą @classmethod do zapisu w Pythonie 3, automatycznie otrzymuje to jako metodę etykiety klasy i nie trzeba pisać @classmethod Myślę, że to może ci pomóc.
źródło
Spróbuj tego. W przypadku Pythona 2.7.12 musimy zdefiniować konstruktor lub dodać self do każdej metody, a następnie zdefiniować instancję klasy o nazwie object.
źródło