Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: JanNovak 10. 05. 2018, 17:17:37
-
Ahoj,
mám poměrně dost začátečnickou otázku. Potřeboval bych volat funkci (nebo nějakou metodu) z proměné. Řekněmě, že mám několik funkcí jejiž jména mám v seznamu a tyto funkce bych chtěl postupně volat nějakým cyklem. Příklad:
"""Takhle to samozřejmě nefunguje """
seznamFunkci = [ "funkce1", "funkce2", "funkce3"]
for i in seznamFunkci:
seznamFunkci[i]()
Jak bych to měl udělat?
-
zalezi na co to chces.
treba:
seznamFunkci = [ funkce1, funkce2 ]
for i in seznamFunkci:
i()
nebo:
seznamFunkci = [ 'funkce1', 'funkce2' ]
for i in seznamFunkci:
globals()()
-
jsem jelito. ta druha verze ma vypadat tak:
seznamFunkci = [ 'funkce1', 'funkce2' ]
for i in seznamFunkci:
globals()[i]()
-
jména funkcí napište bez uvozovek
-
Super to by šlo. Není to uplně estetické, ale funguje to. Jen to nefunguje při volání metody:
nazevTridy.globals()[i]()
-
class myClass:
def f1(self):
print("funguje to")
var = "f1" # nazev funkce ve třídě myClass
m = myClass()
""" ________________ """
m.var() # nefunguje
m.globals()[var]() # nefunguje
Potřeboval bych nějak nasměrovat. Vůbec ani nevím pod čím bych odpověď měl hledat.
-
Potřeboval bych nějak nasměrovat. Vůbec ani nevím pod čím bych odpověď měl hledat.
__dict__
https://docs.python.org/3/reference/datamodel.html
-
class myClass:
def f1(self):
print("funguje to")
var = "f1" # nazev funkce ve třídě myClass
m = myClass()
m.__dict__[var]()
-
- máš-li název funkce, hledáš v patřičném slovníku
- znáš-li funkci, a jen ji chceš předávat, tak ji normálně použiješ, ale bez závorek
- funkci, kterou máš uloženou v proměnné zavoláš tak, že jí dáš závorky.
def a():
return "A"
def b():
return "B"
class Klass:
def m(self):
return "C"
inst = Klass()
xs = [a, b, inst.m]
for m in xs:
print m()
print globals()["a"]()
print globals()["b"]()
print getattr(inst, "a")()
-
getattr je lepší než moje rada s __dict__
-
gll, BoneFlute: To je super... moc vám děkuju.