# uncomment this and experience the meaning of speed :-) # from psyco import compact as object class Property(object): "Emulate PyProperty_Type() in Objects/descrobject.c" def __init__(self, fget=None, fset=None, fdel=None, doc=None): self.fget = fget self.fset = fset self.fdel = fdel self.__doc__ = doc def __get__(self, obj, objtype=None): if obj is None: return self if self.fget is None: raise AttributeError, "unreadable attribute" return self.fget(obj) def __set__(self, obj, value): if self.fset is None: raise AttributeError, "can't set attribute" self.fset(obj, value) def __delete__(self, obj): if self.fdel is None: raise AttributeError, "can't delete attribute" self.fdel(obj) class F(object): def __init__(self): self.state = 0 self.dummy = 0 def get(self): self.state ^= 1 return self.state def set(self, val): self.dummy = val a = property(get, set) b = Property(get, set) f = F() def time_property_get(n): total = 0 f.state = 0 for i in range(n): total += f.a assert total == int((n + 1) / 2), total def time_method_get(n): total = 0 f.state = 0 for i in range(n): total += f.get() assert total == int((n + 1) / 2), total def time_pyproperty_get(n): total = 0 f.state = 0 for i in range(n): total += f.b assert total == int((n + 1) / 2), total def time_property_set(n): for i in range(n): f.a = i assert f.dummy == i def time_method_set(n): for i in range(n): f.set(i) assert f.dummy == i def time_pyproperty_set(n): for i in range(n): f.b = i assert f.dummy == i