我有以下Bird定义:
class Bird:
def __init__(self, swarm, position = None):
if (swarm == None):
raise ValueError("swarm variable should not be None!")
if (not(type(swarm)).__name__ == 'ParticleSwarmOptimization'):
raise TypeError("swarm variable must be of type ParticleSwarmOptimization!")
在最后一行引起错误。在解释器中打印:
(type(swarm)).__name__
'instance'
我希望它能打印出“ParticleSwarmOptimization”。 我通过以下方式调用Bird的构造函数:
def AddBird(self, position = None):
self.birds += Bird(self, position)
有了这个,我希望每只鸟都能引用主要的ParticleSwarmOptimization类,我想确保每次创建一个Bird时,我实际上都有一个ParticleSwarmOptimization实例引用,而不是其他任何东西。
谢谢!
答案 0 :(得分:4)
使用:
assert isinstance(swarm, ParticleSwarmOptimization)
Python的文化是不做这些防御性检查,而是简单地使用变量。如果类型错误,最终会引发异常。
答案 1 :(得分:4)
其他人已经提到了正确的方法,但是你得到这个错误的原因是因为你使用的是旧的样式类。要获得新式类,请使类成为子类对象。
答案 2 :(得分:0)
尝试使用
isinstance
代替。