Seite 1 von 1

Method Dispatch ohne eval?

Verfasst: Montag 22. März 2010, 09:22
von Ronnie
Ich habe angefangen "Metaprogramming in Ruby" zu lesen und habe überlegt, wie man den Method-Dispatch in Python realisieren kann:

Code: Alles auswählen

>>> class Foo:
	def test_foo ():
		return "Testing Foo..."
	def test_bar ():
		return "Testing Bar..."
	def foo ():
		return "Foo..."

	
>>> f = Foo
>>> [eval('f.' + m)() for m in dir(f) if m.startswith('test')]
['Testing Bar...', 'Testing Foo...']
Das funktioniert so, benutzt aber eval. Gibt es eine andere (bessere) Möglichkeit indirekt eine Methode aufzurufen?

Verfasst: Montag 22. März 2010, 09:27
von Darii
Du suchst getattr.

Verfasst: Montag 22. März 2010, 09:34
von Ronnie
Darii hat geschrieben:Du suchst getattr.
Danke, das ist es! Aufgrund des Namens ist es mir nicht aufgefallen. :oops:

Verfasst: Montag 22. März 2010, 12:32
von derdon
Vielleicht suchst du auch das Modul unittest

Verfasst: Dienstag 23. März 2010, 00:34
von Leonidas
derdon hat geschrieben:Vielleicht suchst du auch das Modul unittest
Das sieht eher aus als würde er nose neu erfinden.