NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
kxmx
Tvůrce
Avatar
kxmx:18.8.2015 21:49

Ahoj potřeboval bych dynamicky vytvořit instanci třídy a zavolat metodu. Dostal jsem k následujícímu řešení, ale příjde mi divné a moc tomu nerozumím. Jak je možné, že jedna funkce vytvoří instaci a také umí volat metodu?

module_name = 'app.models.admin'
class_name = 'AdminModel'
method_name = 'set_name'
parameter = 'Pepina'

module = importlib.import_module(module_name)
instance = getattr(module, class_name)()
getattr(instance, method_name)(parameter)

Další dotaz by byl, jak dynamicky předat x parametrů jinak než polem. To momentálně řeším evalem, ale vnitru doufám, že existuje nějaké čisté pythonské řešení a jen na to jdu celou dobu špatně.
Dík za pomoc

 
Odpovědět
18.8.2015 21:49
Avatar
coells
Tvůrce
Avatar
Odpovídá na kxmx
coells:18.8.2015 22:59

Built-in funkce getattr() pouze vrací atribut - v prvním případě atribut modulu, ve druhém atribut instance, pro lepší pochopení:

module_name = 'app.models.admin'
class_name = 'AdminModel'
method_name = 'set_name'
parameter = 'Pepina'
parameters = ['Pepina', 'Lojza']

# nahraje modul
module = importlib.import_module(module_name)
# ziska instanci tridy
cls = getattr(module, class_name)
# vytvori objekt zavolanim kontruktoru
instance = cls()
# ziska instanci metody
my_method = getattr(instance, method_name)
# zavola metodu
my_method(parameter)
# zavola metodu se dvema parametry
my_method(*parameters)
Editováno 18.8.2015 23:02
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
18.8.2015 22:59
Avatar
kxmx
Tvůrce
Avatar
Odpovídá na coells
kxmx:19.8.2015 7:45

super díky

 
Nahoru Odpovědět
19.8.2015 7:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.