1


0

インスタンスの参照をメソッドに渡す方法は?

私は次の鳥の定義を持っています:

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クラスへの参照を持ち、Birdが作成されるたびに、実際にはParticleSwarmOptimizationインスタンス参照があり、他にはないことを確認したいです。

ありがとうございます。

3 Answer


4


use:

assert isinstance(swarm, ParticleSwarmOptimization)

Pythonの文化は、このような種類の防御チェックを行わず、変数を単に使用することです。 間違ったタイプの場合、最終的に例外が発生します。


4


他の人はこれを行う正しい方法を述べていますが、そのエラーが発生する理由は、古いスタイルのクラスを使用しているためです。 新しいスタイルのクラスを取得するには、クラスをサブクラスオブジェクトにします。


0


使ってみてください

isinstance

代わりに。