, . - , .
/:
class ObservingMeta(type):
def __call__(cls, *args, **kw):
instance = super(ObservingMeta, cls).__call__(*args, **kw)
for attr in vars(cls).values():
if hasattr(attr, '__observer__'):
bound = attr.__get__(instance, cls)
Observable.instance().obs.append(bound)
return instance
, cls, ; :
def on_event_method(f):
f.__observer__ = True
return f
:
class O2(object):
__metaclass__ = ObservingMeta
def __init__(self, name):
self.name = name
@on_event_method
def eventx(self, data):
print self.name + " Event: " + data
, Observable singleton ; O2, bound eventx , , , .
python WeakSet, , , , , .