【发布时间】:2018-08-13 02:57:14
【问题描述】:
我有一组类,它们都应该跟踪它们是哪个实例。为此,我在父类中有一个类变量,它在每个对象初始化时被复制和递增。这是一个似乎可以正常工作的最小示例:
class Parent:
counter = 0
def __init__(self):
self.name = self.__class__.__name__ + "_" + str(self.__class__.counter)
self.__class__.counter += 1
def __repr__(self):
return self.name
mother = Parent()
father = Parent()
print(mother)
print(father)
父母_0
父母_1
到目前为止一切顺利。现在我想使用一些具有相同行为的子类而不重写代码。所以我这样做:
class Child(Parent):
# counter = 0
pass
son = Child()
daughter = Child()
stepfather = Parent()
print(son)
print(daughter)
print(stepfather)
孩子_2
Child_3
父母_2
这种行为不是我想要的。当创建子对象的第一个实例时,它会继承父计数器当时具有的任何值,但是在此之后,每个类都维护自己的计数器。我可以通过将counter = 0 放入每个子类来避免这种情况,但这让我觉得多余。有没有更优雅的方法可以从父级继承行为,而不必每次都重新声明相同的变量?
【问题讨论】:
-
不确定我的理解是否正确 - 您是希望每个子类都有自己的基于 0 的计数器,还是希望在所有基类/派生类上运行计数器?
-
您的预期输出是什么?是所有对象共享一个柜台,还是为孩子和父母提供一个单独的柜台?
-
抱歉不清楚。我希望每个类和子类都有自己的计数器,从 0 开始。取消注释我的代码示例中的单个注释行给出了我想要的行为。
-
添加代码示例
标签: python-3.x inheritance class-variables