W Pythonie oświadczenie import służy do modułów, a nie klas ... więc zaimportować klasę trzeba coś podobnego
from mymodule import MyClass
więcej do punktu pytanie odpowiedź brzmi: tak. W Pythonie klasy są zwykłymi obiektami, a metoda klasy jest po prostu funkcją zapisaną w atrybucie object.
Atrybuty instancji obiektów w Pythonie są ponadto dynamiczne (można dodawać nowe atrybuty obiektów w środowisku wykonawczym), a fakt ten w połączeniu z poprzednim oznacza, że można dodać nową metodę do klasy w środowisku wykonawczym.
class MyClass:
def __init__(self, x):
self.x = x
...
obj = MyClass(42)
def new_method(self):
print "x attribute is", self.x
MyClass.new_method = new_method
obj.new_method()
Jak to działa? Po wpisaniu
obj.new_method()
Python będzie wykonać następujące czynności:
wygląd new_method
wewnątrz obiektu obj
.
Nie znajdując go jako atrybutu instancji spróbuje zajrzeć do obiektu klasy (który jest dostępny pod numerem obj.__class__
), gdzie znajdzie tę funkcję.
Teraz jest nieco oszustwa, ponieważ Python zauważy, że to, co znaleziono to funkcja a zatem będzie „wrap” go w zamknięciu, aby stworzyć to, co nazywa się „związany metoda”. Jest to potrzebne, ponieważ podczas wywoływania obj.new_method()
chcesz wywołać MyClass.new_method(obj)
... innymi słowy, wiążąc funkcję z obj
, aby utworzyć powiązaną metodę, należy uwzględnić dodanie parametru self
.
Ta metoda związana jest zwracana przez obj.new_method
, a następnie zostanie ostatecznie wywołana z powodu kończącego się ()
w tym wierszu kodu.
Jeśli poszukiwanie klasy też nie uda zamiast klas macierzyste są również wszystkie wyszukiwane w konkretnym celu znalezienia odziedziczonych metod i atrybutów, a zatem rzeczy są tylko trochę bardziej skomplikowane.
Możliwe użycie: http://stackoverflow.com/questions/962962/python-changing-methods-and-attributes-at-runtime –