如何在方法中传递实例的引用?

时间:2009-12-13 03:57:19

标签: python

我有以下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实例引用,而不是其他任何东西。

谢谢!

3 个答案:

答案 0 :(得分:4)

使用:

assert isinstance(swarm, ParticleSwarmOptimization)

Python的文化是不做这些防御性检查,而是简单地使用变量。如果类型错误,最终会引发异常。

答案 1 :(得分:4)

其他人已经提到了正确的方法,但是你得到这个错误的原因是因为你使用的是旧的样式类。要获得新式类,请使类成为子类对象。

答案 2 :(得分:0)

尝试使用

isinstance

代替。