如何在不重载函数的情况下使用基类函数更改各自的类级别属性?
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 = 1
和self.addOne()
。
我不想使用实例属性,因为我必须为所有子类重载addOne函数。
答案 0 :(得分:0)
选项1 :使用type
功能获取self
类。
def addOne(self):
cls = type(self)
cls.a += 1
选项2:将addOne
变为classmethod
:
@classmethod
def addOne(cls):
cls.a += 1