Pythonの:__initへの複数の呼び出し__()同じインスタンス上

StackOverflow https://stackoverflow.com/questions/2144988

  •  23-09-2019
  •  | 
  •  

質問

オブジェクトが作成されたときに

__init__()関数が呼び出されます。 それはそのが作成された後、再びオブジェクト__init__()関数を呼び出すしても大丈夫ですか?

instance = cls(p1=1, p2=2)
# some code
instance.__init__(p1=123, p2=234)
# some more code
instance.__init__(p1=23, p2=24)

なぜ誰もがすでに作成されたオブジェクトに__init__()を呼び出したいのでしょうか?

良い質問。アイワナインスタンスのフィールドを再初期化します。

役に立ちましたか?

解決

コール__init__への罰金は、複数のオブジェクトに一回以上、__init__が影響して符号化される限り、あなたは(それが何であれ)を入手したいと思います。それは(!あなたが適切に、より良いコード__init__をいただきたいのでを - )が起こる典型的な場合、あなたのクラスの__new__メソッドは、クラスのインスタンスを返すときです:返されるインスタンスで呼び出されるのないことを原因__init__(第二、あるいは第二十かもしれない何のため、時間、あなたは__new__を経由して「リサイクル」のインスタンスを保持している場合 - !。)

他のヒント

あなたがすることができますが、それは__init__を行うことを意図しているものを壊すのようなものです。あなたにも、次に続くと一度だけ呼び出される__init__を期待するかもしれないので、Pythonのの多くは、実際には単なる慣習です。私はあなたがインスタンスをリセットしたいときに、initまたはresetまたはインスタンス変数を設定します何かと呼ばれる関数を作成し使用することをお勧めします、と__init__だけコールinitを持っていると思います。これは間違いなく、より正気に見えます:

x = Pt(1,2)
x.set(3,4)
x.set(5,10)
私の知る限りでは、それは問題が発生することはありません(の編集:super(...).__init__(...)のコーシャの使用により示唆されるように)、私はreset()メソッドを持つとの両方__init__()にし、ときにそれを呼び出すと思いますあなたはきれいになりリセットする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top