Nie znam Pythona (nigdy wcześniej go nie używał: D), ale nie mogę znaleźć niczego w Internecie. Może po prostu nie zadałem poprawnego pytania, ale oto:Czy można zmienić implementację metody instancji bez zmiany wszystkich innych instancji tej samej klasy?
Chcę zmienić implementację konkretnej metody instancji. Kiedy google za to, znalazłem można to zrobić, ale zmienia realizację wszystkich innych przypadkach z tej samej klasy, na przykład:
def showyImp(self):
print self.y
class Foo:
def __init__(self):
self.x = "x = 25"
self.y = "y = 4"
def showx(self):
print self.x
def showy(self):
print "y = woohoo"
class Bar:
def __init__(self):
Foo.showy = showyImp
self.foo = Foo()
def show(self):
self.foo.showx()
self.foo.showy()
if __name__ == '__main__':
b = Bar()
b.show()
f = Foo()
f.showx()
f.showy()
To nie działa zgodnie z oczekiwaniami, ponieważ wynik jest następujący :
x = 25
y = 4
x = 25
y = 4
I ma to być:
x = 25
y = 4
x = 25
y = woohoo
I próbowałem zmienić metodę init Bar'a w następujący sposób:
def __init__(self):
self.foo = Foo()
self.foo.showy = showyImp
Ale pojawia się następujący komunikat o błędzie:
showyImp() wykonuje dokładnie 1 argument (0 podany)
Więc tak ... Próbowałem za pomocą setattr()
, ale wydaje jak to jest takie samo jak self.foo.showy = showyImp
.
Jakaś wskazówka? :)
Czy istnieje szczególny powód, dla którego nie robisz tego z dziedziczeniem? –
Tak, ponieważ mam bardzo ograniczony dostęp do utworzonego obiektu.Nie jestem tym, który ją tworzy (stąd brak możliwości dziedziczenia), i nie mogę modyfikować kodu oryginalnego obiektu (również dlatego, że i tak nie miałoby to sensu, muszę zmienić metodę tylko w kontekście, który jest zupełnie inny z czego obiekt jest przeznaczony na :). –