小编典典

覆盖python中的类变量?

python

下面,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

阅读 218

收藏
2021-01-20

共1个答案

小编典典

如果您不想像falsetru所建议的那样违反DRY原理,则需要使用元类。我本来想写点东西,但是在SO上已经有关于元类的很好的长描述,所以请检查一下。

简而言之,元类使您可以控制子类的创建。

基本上,您需要做的是,在创建的子类后Parent,将_id成员添加到新创建的子类中。

2021-01-20