1 回答

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
可能最簡(jiǎn)單的方法是使用Particle的__subclasses__方法。
您可以這樣定義ParticleSystem:
class ParticleSystem(object):
def __init__(self):
self.particles = []
def create_particle(self, particle_type, location):
if particle_type in (cls.__name__ for cls in Particle.__subclasses__()):
p = eval(particle_type)(self)
p.location = location
self.particles.append(p)
else:
raise TypeError("{} is not a subclass of Particle".format(particle_type))
也就是說(shuō),避免讓不同的類了解彼此的內(nèi)部運(yùn)作通常是一個(gè)好主意。是否ParticleSystem真的需要知道所有的子類Particle(更好的是-它每個(gè)粒子需要了解它的系統(tǒng)?)?還是只需要一種簡(jiǎn)單的方法來(lái)實(shí)例化新Particle對(duì)象?如果僅需要后者,則可以使用簡(jiǎn)單的工廠方法。
注意:使用eval通常有點(diǎn)魯ck,但由于它受到in Particle.__subclasses__()條件的保護(hù),所以我們應(yīng)該沒(méi)事。
添加回答
舉報(bào)