目的-
從父類中洗掉所有子類的實體
背景-
例子-
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>]
[]
要求的結果-
[]
[]
題-
我可以實作一個方法來從迭代的父類中洗掉所有子類的實體,Sprite.__subclasses__()但這需要為每個子類創建一個容器,包括Playerand Projectile。
有沒有另一種方法可以從父類中洗掉子類的所有實體?
*我正在使用 Python 3.8.9
uj5u.com熱心網友回復:
如下所述,我在父類中創建了一個靜態類方法,呼叫該方法時會清除其下的所有實體,包括子實體。
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430950.html
上一篇:如何更好地組織類的層次結構
