()メソッドをクラスの1回だけ呼び出す方法はありますか?または、クラスからオブジェクトを作成するときに、()の呼び出しを無効にするにはどうすればよいですか?Pythonは__init __()メソッドを1回だけ呼び出します
1
A
答えて
7
あなたはクラスのしかつのインスタンスがPEP18から得て、あなたは、次のようなデコレータを作成することができますがありシングルトン、場合:
def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class MyClass:
pass
はそれを試してみてください:
を>>> a = MyClass()
>>> b = MyClass()
>>> a == b
True
0
initメソッドは常に呼び出されますが、オプションでオブジェクトの作成後に呼び出すrun()などの別のメソッドを作成することもできます。
foo = ClassName()
foo.run() # replacement for __init__
foo2 = ClassName()
2
__init__
を無効にする直接的な方法はありませんが、これを回避するには、いくつかの方法があります。そのうちの1人が旗を掲げています:
class Class:
_init_already = False
__init__(self):
if not Class._init_already:
...
Class._init_already = True
これは醜いです。本当に達成しようとしていることは何ですか?
1
__init__()
には、一度だけ実行したいものを入れないでください。クラスのインスタンスを作成するたびに__init__()
が実行されます。
クラスの作成をカスタマイズする場合は、metaclassを作成する必要があります。基本的には、クラスを最初に定義したときに一度だけ実行される関数を定義できます。
関連する問題
- 1. @Scheduleメソッドを一度に1回だけ呼び出す方法
- 2. メソッドをアプリケーションライフタイム全体で1回だけ呼び出す
- 3. MKMapViewはdidSelectコールバックを1回だけ呼び出します
- 4. Javascriptタイマーはコードビハインドメソッドを1回だけ呼び出します
- 5. メソッドが1回だけ呼び出されるJquery
- 6. 特定のメソッドを1回だけ呼び出します。Angular JS
- 7. Ajaxを1回だけ呼び出します。
- 8. Reactjs AJAX呼び出しを複数回呼び出す(1回のクリックで1回だけ!)
- 9. 1回の呼び出しでメソッドを呼び出す
- 10. 問題:onLocationListenerは1回だけ呼び出されます
- 11. appdelegate deallocは1回だけ呼び出されますか?
- 12. CMake check_function_existsはマクロで1回だけ呼び出されます
- 13. Toast.makeTextは1回だけ呼び出されます
- 14. Linq:WhereとOrderByに同じメソッドを2回ではなく1回だけ呼び出しますか?
- 15. requestAnimationFrameが1回だけ呼び出されています
- 16. ReactiveX:Observable.Create()を1回だけ呼び出すようにする
- 17. メモオブジェクトはまだ__init __()が呼び出されていますか?
- 18. 関数をx秒に1回だけ呼び出す
- 19. Golang switch文が関数を1回だけ呼び出す
- 20. JavaScriptコードコードビハインド関数を1回だけ呼び出す
- 21. onkeyupイベントを1回だけ確実に呼び出す方法
- 22. android-onPostInitCompleteは、getRemoteServiceへの呼び出しごとに1回だけ呼び出すことができます
- 23. 毎回ではなくJavaScript関数を1回だけ呼び出す
- 24. メソッドオーバーロードC++ - >呼び出されるメソッドは1つだけ
- 25. Linqは1つのステートメントで1回だけ関数を呼び出す
- 26. jQueryの.load()関数は1回だけ呼び出されます。
- 27. jQueryのクリック機能は1回だけ呼び出されます
- 28. ltraceは2回の呼び出しだけを出力します
- 29. Swift 3.1で関数呼び出しを1回だけ行う方法は?
- 30. JavaScriptメソッド呼び出しは、ScriptManagerを使用して1回のみ呼び出すことができます
シングルトンが必要なのですか? –
'__init__'は常にオブジェクト構築時に呼び出されます。それがそこにあるのです。それを一度だけ呼び出そうとするなら、あなたのロジックに欠陥がある可能性があります。あなたが達成しようとしているものを投稿すると、より正確な解決策を見つけるのを助けることができるかもしれません。 –
'__init__'の目的は、クラスのインスタンスを作成するときに発生することです。あなたがここで何をしようとしているのかについてもっと具体的にしてください。 – Will