我需要你们的建议,伙计们,因为我对编程特别是面向对象编程相当陌生。我需要的是分别获得每个子类的所有实例,以及所有这些实例。我就是搞不懂。非常感谢B类,我想用它作为一个可记录的函数,但也许这只是胡说八道
class A:
def __init__(self, name):
self.__name = name
def __str__(self):
return f'\n\tName: {self.__name}'
class Loggable(A):
instances = []
def __init__(self):
self.__class__.instances.append(self)
class C(Loggable):
def __init__(self, name, x1, x2):
super(Loggable, self).__init__(name)
super().__init__()
self.__x1 = x1
self.__x2 = x2
def __str__(self):
return f'{super().__str__()}\n\tX1: {self.__x1}\n\tX2: {self.__x2}'
class D(Loggable):
def __init__(self, name, g1, g2):
super(Loggable, self).__init__(name)
super().__init__()
self.__g1 = g1
self.__g2 = g2
def __str__(self):
return f'{super().__str__()}\n\tG1: {self.__g1}\n\tG2: {self.__g2}'
class TableDump(C, D):
@classmethod
def dumpC(cls):
for instance in cls.instances:
print(instance)
@classmethod
def dumpD(cls):
for instance in cls.instances:
print(instance)
def main():
c1 = C("C1" , "C1", "C1")
c2 = C("C2" , "X1", "X2")
c3 = C("C3" , "X1", "X2")
d1 = D("D1" , "D1", "D1")
d2 = D("D2" , "D2", "D2")
d3 = D("D3" , "D3", "D3")
TableDump.dumpC()
if __name__ == '__main__':
main()
好的,从您描述当前代码的错误的评论中,我想我终于明白了您想知道如何做。一种方法是保留所有实例的列表,然后过滤所有特定类型的实例
下面是基于您问题中的代码的两种方法的说明。请注意,我删除了您拥有的
Loggable
类,因为它不是严格必需的-但是如果出于某种原因需要它,可以将其放回抱歉重写,但我这样做是为了简单:
现在您可以通过list
A.instances
访问类A的所有实例和所有子类相关问题 更多 >
编程相关推荐