Diskuze: dynamický import a vytvoření instance

Python Python dynamický import a vytvoření instance

Avatar
kxmx
Redaktor
Avatar
kxmx:

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
Redaktor
Avatar
Odpovídá na kxmx
coells:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 18.8.2015 22:59
Avatar
kxmx
Redaktor
Avatar
 
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.