下面,base_id而且_id是一个类变量和所有子类之间共享。 有没有一种方法可以将它们分成每个类?
base_id
_id
from itertools import count class Parent(object): base_id = 0 _id = count(0) def __init__(self): self.id = self.base_id + self._id.next() class Child1(Parent): base_id = 100 def __init__(self): Parent.__init__(self) print 'Child1:', self.id class Child2(Parent): base_id = 200 def __init__(self): Parent.__init__(self) print 'Child2:', self.id c1 = Child1() # 100 c2 = Child2() # 201 <- want this to be 200 c1 = Child1() # 102 <- want this to be 101 c2 = Child2() # 203 <- want this to be 201
如果您不想像falsetru所建议的那样违反DRY原理,则需要使用元类。我本来想写点东西,但是在SO上已经有关于元类的很好的长描述,所以请检查一下。
简而言之,元类使您可以控制子类的创建。
基本上,您需要做的是,在创建的子类后Parent,将_id成员添加到新创建的子类中。
Parent