1 回答
TA贡献1863条经验 获得超2个赞
可能最简单的方法是使用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))
也就是说,避免让不同的类了解彼此的内部运作通常是一个好主意。是否ParticleSystem真的需要知道所有的子类Particle(更好的是-它每个粒子需要了解它的系统?)?还是只需要一种简单的方法来实例化新Particle对象?如果仅需要后者,则可以使用简单的工厂方法。
注意:使用eval通常有点鲁ck,但由于它受到in Particle.__subclasses__()条件的保护,所以我们应该没事。
添加回答
举报