Mam kilka różnych obiektów (różne nazwy funkcji, różne podpisy) i małpkę łatam je, aby mieć wspólny sposób dostępu do nich z różnych funkcji. Krótko mówiąc, istnieje dyspozytor, który bierze obiekty, które chcę łatać i w zależności od typu obiektu, który wywołuje inny patcher. Patcher doda metody obiektu:Dodawanie klasy bazowej do istniejącego obiektu w pythonie
def patcher_of_some_type(object):
def target(self, value):
# do something and call self methods
object.target = types.MethodType(target, object)
# many more of these
Ponieważ program staje się coraz bardziej skomplikowane, co owijkę wokół obiektu (lub klasy obiektów) wydaje się być lepszym pomysłem. Niektóre łatki mają wspólny kod lub są ze sobą powiązane. Ale nie kontroluję tworzenia obiektu ani tworzenia klasy. Dostaję tylko przedmioty. I nawet gdybym mógł to zrobić, po prostu chciałbym owijać (lub łatać) pewne obiekty, nie wszystkie.
Jednym z rozwiązań może być dodanie klasy bazowej do istniejącego obiektu, ale nie jestem pewien, jak to jest możliwe do utrzymania i bezpieczne. Czy istnieje inne rozwiązanie?
Tak zajęcia nie są zdefiniowane od ciebie? – dav1d
Nie, klasy są zdefiniowane w bibliotece, której nie kontroluję. Mogłabym tworzyć wrappery ze wszystkich klas, ale to będzie działać tylko dla obiektów, które stworzyłem, a nie dla tych, które są tworzone przez bibliotekę. Jeśli poprawię bibliotekę, nastąpi odwrotność: wszystkie obiekty są załatane, a ja chcę tylko załatać niektóre z nich. Wreszcie, jeśli zawijam niektóre obiekty, potrzebowałbym zachować własną bazę danych, aby się do nich odnieść. Właśnie dlatego teraz łatam obiekty, które chcę. – Hernan
Zdefiniowałbym klasę otoki do przechowywania obiektów. Potrzeba posiadania różnych rodzajów owijki, które mają wspólny kod, może być obsługiwana przez posiadanie podstawowej klasy opakowania i wyprowadzanie z niej specjalistycznych wersji. Podstawowe rzeczy z OOP ... – martineau