清除父 class- Python OOP 中的容器时删除子 classes 的所有实例

Delete all instances of child classes when clearing container in parent class- Python OOP

瞄准-

从父 class

中删除子 classes 的所有实例

背景-

示例-

class Sprite:
    all = []
    def __init__(self):
        self.__class__.__bases__[0].all.append(self)

class Player(Sprite):
    def __init__(self):
        super().__init__()

class Enemy(Sprite):
    all = []
    def __init__(self):
        super().__init__()
        self.__class__.all.append(self)

class Projectile(Sprite):
    def __init__(self):
        super().__init__()

for i in range(3):
    Enemy()

Sprite.all.clear()
print(Enemy.all)
print(Sprite.all)

结果-

[<Enemy object at 0x1025bd580>, <Enemy object at 0x1025bd5b0>, <Enemy object at 0x1025bd070>]
[]

要求的结果-

[]
[]

问题-

我可以实现一种方法来从父 class 迭代 Sprite.__subclasses__() 中删除子 classes 的所有实例,但这需要为每个子 class 创建一个容器 class,包括 PlayerProjectile.

有没有其他方法可以从父 class 中删除子 classes 的所有实例?

*我正在使用 Python 3.8.9

我在父 class 中创建了一个静态 class 方法,如下所述,调用时会清除其下的所有实例,包括子实例。

class Sprite:
    all = []
    def __init__(self):
        self.__class__.__bases__[0].all.append(self)
    
    def __clear_all__():
        [x.all.clear() for x in Sprite.all]
        Sprite.all.clear()
    
class Player(Sprite):
    def __init__(self):
        super().__init__()

class Enemy(Sprite):
    all = []
    def __init__(self):
        super().__init__()
        self.__class__.all.append(self)

class Projectile(Sprite):
    def __init__(self):
        super().__init__()

for i in range(3):
    Enemy()

print(Sprite.__clear_all__())
print(Sprite.all)
print(Enemy.all)