Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
C# .NET + discount 30

Diskuze: dynamický import a vytvoření instance

Aktivity
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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět
18.8.2015 22:59
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
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.