from Bio.PropertyManager import PropertyManager def test(): pm = PropertyManager() class Foo: pass class Bar: pass class FooBar(Foo, Bar): pass data = [4, 5, 6] pm.class_property[Foo]["name"] = "only Foo" pm.class_property[Bar]["time"] = "11 pm" pm.class_property[FooBar]["list"] = data pm.class_property[FooBar]["name"] = "Foo Bar" f = Foo() b = Bar() fb = FooBar() print pm.resolve(f, "name") #print pm.resolve(b, "name") print pm.resolve(fb, "name") def list_resolver(manager, klass, property, FooBar = FooBar): print "resolving list" x = manager.resolve_class(FooBar, "list") y = [] for a in x: y.append(a + 10) return y pm.class_property_resolver[Bar]["list"] = list_resolver print pm.resolve(fb, "list") print pm.resolve(b, "list") print pm.resolve(b, "list") data.append(-10) print pm.resolve(b, "list") def prop_resolver(manager, klass, property): print "I am called" x = str(klass) + property manager.class_property[klass][property] = x return x pm.class_resolver[Foo] = prop_resolver print pm.resolve(f, "qwq") print pm.resolve(f, "qwq") test()