Pythonの:__initへの複数の呼び出し__()同じインスタンス上
-
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__()
にし、ときにそれを呼び出すと思いますあなたはきれいになりリセットする必要があります。