1

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

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 = 1C.a = 1之后self.addOne()

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

4

1 回答 1

0

选项 1:使用type函数获取self.

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

选项2:变成addOneclassmethod

@classmethod
def addOne(cls):
    cls.a += 1
于 2018-05-22T06:29:20.690 回答