【发布时间】:2021-11-17 03:03:45
【问题描述】:
我试图为这个父类的所有子实例设置一个静态变量作为“id”。我遇到的问题是重复计算此 ID,可能是因为父母的 __init__ 被调用了两次。但是如果我删除显式的Parent().__init__() 调用,那么计数器根本不会增加。如何让 id 只增加一个?这是我的代码 sn-p:
#!/usr/bin/python3
class Parent:
cls_id = 0
def __init__ (cls):
cls.cls_inc_id()
@classmethod
def cls_inc_id (cls):
cls.cls_id += 1
@classmethod
def child_inc_id (self):
self.id += 1
class Child1 (Parent):
def __init__ (self):
Parent().__init__()
self.id = super().cls_id
print ("Child1 id: ", self.id)
class Child2 (Parent):
def __init__ (self):
Parent().__init__()
self.id = super().cls_id
print ("Child2 id: ", self.id)
child1 = Child1()
child2 = Child1()
child3 = Child2()
child4 = Child2()
我的输出是: %> ./static_vars.py
Child1 id: 2
Child1 id: 4
Child2 id: 6
Child2 id: 8
提前致谢
【问题讨论】:
-
对不起,您到底想完成什么? 您期望的输出是什么?
-
顺便说一句,不要使用
cls作为__init__的第一个参数的名称。按照惯例,它应该是__init__ (self),因为它是一个实例方法