Wenn ich Euch jetzt sage, wozu ich das brauche, wird sicherlich gleich ein Sturm der Entrüstung über mir hereinbrechen...
Ok, ich hab' eine 'Observable()', deren Rückruffunktionen ich samt dazugehörige Parameter übergebe:
Code: Alles auswählen
class Test(object):
def __init__(self):
self.a = 1
self.b = 2
def test():
return 5, 6
def callback(a, b):
print a, b
Code: Alles auswählen
>>> t = Test()
>>> o = Observable()
>>> o.add_observer(callback, (t, 'a'), (t, 'b'))
>>> o.add_observer(callback, (3, 4))
>>> o.add_observer(callback, (test,))
>>> o.notify_observers()
>>> 1, 2
>>> 3, 4
>>> 5, 6
Ihr könnt' Euch sicher denken, woran ich festhänge: 'add_observer' überprüft zunächst, ob das erste Element callable ist. Wenn nicht, kann es sich entweder um ein Exemplar mit Attribut (t, 'a') oder um feste Parameter (3, 4) handeln.
Nachdem nun sowohl 't' wie auch '3' nicht callable sind aber nur 't' ein Attribut 'a' hat, '3' aber kein Attribut '4', habe ich das erstmal mit 'try: ... except (TypeError, AttributeError):' gelöst.
'try: ... except: ...' mutet mir aber immer etwas wie ein Hack an, deshalb war ich auf der Suche nach einer Möglichkeit, 't' von '3' klar unterscheiden zu können.
mutetella