清除父 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,包括 Player
和 Projectile
.
有没有其他方法可以从父 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)
瞄准-
从父 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,包括 Player
和 Projectile
.
有没有其他方法可以从父 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)