在python中使用父类函数中的子类的类级属性

时间:2018-05-22 06:18:45

标签: python python-3.x class-attributes

如何在不重载函数的情况下使用基类函数更改各自的类级别属性?

class A:
    a = 0

    def addOne(self):
        print(A.a)      # prints 0
        A.a = A.a + 1
        print(A.a)      # it stores the value of a over all the child classes

class B(A):
    a = 0
    print(A.a)      # prints 0
    print(B.a)      # prints 0
    self.addOne()
    print(A.a)      # prints 1
    print(B.a)      # prints 0

Class C(A):
    a = 0
    print(A.a)      # prints 1
    print(C.a)      # prints 0
    self.addOne()
    print(A.a)      # prints 2
    print(C.a)      # prints 0

我希望在B.a = 1之后C.a = 1self.addOne()

我不想使用实例属性,因为我必须为所有子类重载addOne函数。

1 个答案:

答案 0 :(得分:0)

选项1 :使用type功能获取self类。

def addOne(self):
    cls = type(self)
    cls.a += 1

选项2:addOne变为classmethod

@classmethod
def addOne(cls):
    cls.a += 1