Notice that Peter's approach also works without inheritance:

registries = {}

@property
def per_class(self):
   cls = type(self)
   try:
      return registries[cls]
   except KeyError:
      result = registries[cls] = []
      return result

class A(object): per_class=per_class
class B(object): per_class=per_class
assert A().per_class is A().per_class
assert B().per_class is B().per_class
assert A().per_class is not B().per_class

(you can also put the per_class property in a module and import it
with
class A(object): from module import per_class).

There is no need to use inheritance if you only need one method.
Notice also that if you
are working with a complex third party framework (say Django) that may
use metaclasses
or strange tricks (such as __slots__) the safer way is to avoid both
inheritance and metaclasses.
HTH,

 Michele
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to