mam krotki który wymienia ustanawiające metody klasy, takich jak:dynamiczne połączenia Metoda W Pythonie 2.7 za pomocą struny nazwy metody
t = ('methA','methB','methC','methD','methE','methF')
i tak dalej ..
Teraz muszę zadzwonić dynamicznie te metody opierają się na dokonanym przez użytkownika wyborze. Metody należy wywoływać w oparciu o indeks. Jeśli więc użytkownik wybierze "0", zostanie wywołana methA
, jeśli zostanie wywołane "5", methF
.
Moja metoda robi to w sposób następujący:
def makeSelection(self, selected):
#methodname = t[selected]
#but as this is from within the class , it has to be appended with 'self.'methodname
# also need to pass some arguments locally calculated here
udało mi się wypracować coś z eval
ale daje błąd i nie jest w ogóle eleganckie.
Co miłym rozwiązaniem byłoby gdybyśmy rozważa metody instancji? Tj .: wyobraź sobie, że metody, które teraz pisałeś, zawierają argumenty self: def methA (self, * args): print 'hello from methA' , ale chciałbym zbudować słownik w klasie (aby można było odczytać klucze bez konieczności o instancji), a nie w konstruktorze. Jak można to zrobić? – marcotama
Można użyć metod niezwiązanych i 'getattr' podobnie jak tutaj. Nie jestem pewien, czy rozumiem, czego chcesz. –
Obiekty z mojej klasy X mają alternatywne metody "eksploracji". Funkcja y łączy się z użytkownikiem i wywołuje pożądaną metodę eksploracji. Zamiast posiadania if-elif-elif -... wolałbym uzyskać dostęp do słownika, ponieważ wygląda lepiej. Ponadto, jeśli słownik był zmienną klasy, mogłem uzyskać dostęp do jego kluczy z zewnątrz. Problem polega na tym, że te metody eksploracji zależą od zmiennych instancji. Myślałem również (i zaimplementowałem) sztuczkę 'getattr', ale po prostu nie wygląda to wcale ładnie. – marcotama