Method Dispatch ohne eval?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ronnie
User
Beiträge: 73
Registriert: Sonntag 21. März 2004, 17:44

Montag 22. März 2010, 09:22

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?
Achtung: User ist ein Python-Lehrling!
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Montag 22. März 2010, 09:27

Du suchst getattr.
Ronnie
User
Beiträge: 73
Registriert: Sonntag 21. März 2004, 17:44

Montag 22. März 2010, 09:34

Darii hat geschrieben:Du suchst getattr.
Danke, das ist es! Aufgrund des Namens ist es mir nicht aufgefallen. :oops:
Achtung: User ist ein Python-Lehrling!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Montag 22. März 2010, 12:32

Vielleicht suchst du auch das Modul unittest
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 23. März 2010, 00:34

derdon hat geschrieben:Vielleicht suchst du auch das Modul unittest
Das sieht eher aus als würde er nose neu erfinden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten