2009-12-13 31 views
1

我有以下鳥定義:如何在方法中傳遞實例的引用?

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」。 我打電話鳥的構造方式如下:

def AddBird(self, position = None): 
    self.birds += Bird(self, position) 

有了這個,我想每一個鳥有主粒子羣優化類的引用,我想,以確保每一個鳥創建時間,我其實一個ParticleSwarmOptimization實例引用,而不是其他任何東西。

謝謝!

回答

4

使用:

assert isinstance(swarm, ParticleSwarmOptimization) 

的Python的文化是不會做這些各種各樣的防守檢查,而不是簡單地使用變量。如果它是錯誤的類型,最終會引發異常。

0

嘗試使用

​​

代替。

4

其他人已經提到了這樣做的正確方法,但是您得到該錯誤的原因是因爲您使用的是舊式類。獲得一個新風格的類可以讓你的類繼承對象。

+1

+1對於推薦新式課程,他們修復了許多舊式課程(包括這個小小的課程;-))。儘管每個人都說'isinstance'在這裏仍然是一個更好的主意;-)。 – 2009-12-13 06:10:09

相關問題