Portál AbcLinuxu, 19. dubna 2024 16:12


Dotaz: python-dynamicke funkce

19.1.2009 11:21 python greenhorn
python-dynamicke funkce
Přečteno: 223×
Odpovědět | Admin
Zdravim, resim nasledujici problem.
class Abc:
        something = [ 'Foo', 'Bar', 'Baz' ]

        def __init__(self):
                for s in something:
                        # ???

abc=Abc()

abc.doFoo()
abc.doBar()
abc.doBaz()
Potrebuju pro kazdou polozku v 'something' za behu programu vyrobit funkci doXXX(). Nevite, jak na to?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.1.2009 12:05 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: python-dynamicke funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
setattr(self, "do" + s, nejakaFunkce)
19.1.2009 12:12 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: python-dynamicke funkce

Ještě bych doplnil malou ukázku s jedním takovým hezkým pythonovým chytákem:

class Abc:
  something = ['Foo', 'Bar', 'Baz']
  def __init__(self):
    for s in self.something:
      fun = lambda: s
      setattr(self, "do" + s, fun)
      del fun


abc=Abc()
print abc.doFoo()  # vypíše: Baz
print abc.doBar()  # vypíše: Baz
print abc.doBaz()  # vypíše: Baz

class Abc2:
  something = ['Foo', 'Bar', 'Baz']
  def __init__(self):
    for s in self.something:
      setattr(self, "do" + s, self._make_fun(s))

  def _make_fun(self, s):
      return lambda: s


abc=Abc2()
print abc.doFoo()  # vypíše Foo
print abc.doBar()  # vypíše Bar
print abc.doBaz()  # vypíše Baz

BTW ten WYSIWYG editor tady je ale stupidní. Musel jsem si to přepnout na Zdroj, abych vůbec něco napsal a nezešílel z toho.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.