下面,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
正如您在问题中所说,
_id
由父类和所有子类共享。为每个子类定义_id
。更新
使用元类:
如果你不想像falsetru建议的那样违反DRY原则,你需要使用元类。我想写点东西,但是there's already a good long description of metaclasses on SO,所以去看看。
简而言之,元类允许您控制子类的创建。
基本上,您需要做的是,在创建
Parent
的子类时,将_id
成员添加到新创建的子类中。如果确实需要这样使用ID,请使用参数:
等等
这假设您不会直接构造
Parent
的实例,但这在示例代码中看起来是合理的。相关问题 更多 >
编程相关推荐