我试图让子类从其超级继承属性,但同时,超级存储子类的集合对象。这是我的尝试,但我觉得这不是一种有效的方法,而且可能还有更好的方法来实现它。
setTimeout
答案 0 :(得分:0)
关于类的设计,有很多未说明的内容可能会对实现产生影响。
以下是与您的实现 类似 的内容,它是一个Python 3实现,并使用更少的代码行,这在这方面更有效。子类容器是父类的类属性;子类实例在创建时添加到容器中。容器包含对对象的弱引用,以便当它们超出范围或被删除时,它们可以被垃圾收集。
import weakref
class SuperCls:
subclass_instances = weakref.WeakKeyDictionary()
def __init__(self, a, b):
self.a = a
self.b = b
self.col = []
class SubCls(SuperCls):
def __init__(self, a, b, c, d):
self.c = c
self.d = d
super().__init__(a,b)
super().subclass_instances[self] = str(self)
def __str__(self):
s = 'a:{}, b:{},c:{},d:{}'.format(self.a,self.b, self.c, self.d)
return s
a = 1
b = 2
sub=SubCls(a,b,3,4)
sub2=SubCls(a,b,5,6)
sub3=SubCls(a,b,7,8)
这些都打印相同的东西 - 每个对象都可以访问容器。
print(' | '.join(map(str, SuperCls.subclass_instances)))
print(' | '.join(map(str, sub.subclass_instances)))
print(' | '.join(map(str, sub2.subclass_instances)))
print(' | '.join(map(str, sub3.subclass_instances)))
print(SuperCls.subclass_instances is sub.subclass_instances is sub2.subclass_instances is sub3.subclass_instances)
将打印True
。