Python 3.6が追加され、PEP 487が追加され、とりわけ__init_subclass__
の方法が追加されている。メタクラスを使用しないABC
のバージョンを書くことは可能ですか?Python 3.6でメタクラスに頼らずにabc.ABCを書くことはできますか?
答えて
気になるのは抽象メソッドのチェックです。ただ、__init_subclass__
方法にabstract method set computationを移動:
def __init_subclass__(cls):
super().__init_subclass__()
# Compute set of abstract method names
abstracts = {name
for name, value in vars(cls).items()
if getattr(value, "__isabstractmethod__", False)}
for base in cls.__bases__:
for name in getattr(base, "__abstractmethods__", set()):
value = getattr(cls, name, None)
if getattr(value, "__isabstractmethod__", False):
abstracts.add(name)
cls.__abstractmethods__ = frozenset(abstracts)
ベースobject.__new__
implementationは、インスタンス化を防ぐために、非空__abstractmethods__
セットを使用します。
しかし、ABCもvirtual subclass registrationをサポートします。 two hook methods this requiresは、がメタクラスに実装されています。
抽象メソッドのチェックを実装するにはどうすればよいですか? –
大丈夫ですか?そしてメタクラスを使わずに残った抽象メソッドがある場合、 '__new__'でインスタンス化をブロックできますか? –
@ NeeG:申し訳ありませんが、基本的な 'object .__ new__'実装はこれを既に行います。 –
- 1. Pympler:Python 3.6で信頼できる?
- 2. Python 3.6では、なぜこう書くことができないのですか?
- 3. Pythonでスクリーンキャプチャを書くことはできますか?
- 4. CTEを使わずに同じクエリを書くことはできますか?
- 5. は、まずPythonの3.6
- 6. Pythonはロックやmutexを使わずにファイルを並列に書くことができますか?
- 7. これをPythonでどのように書くことができますか?
- 8. 私のアプリケーションからAndroidの信頼できる証明書エントリにアクセスすることはできますか
- 9. Responseオブジェクトに頼らずにJAX-RSを使ってETagsを設定することはできますか?
- 10. このクエリをActiveRecordに書くことはできますか?
- 11. Anaconda Python 3.6 - pythonwとpythonは同等であるはずですか?
- 12. SDL_Surface :: pitchを定数に頼ることはできますか?
- 13. コンパイルせずにpython(標準のpython.org python)でwindows(10)サービスを書くことは可能ですか?
- 14. コンソールアプリケーションをスキームに書くことはできますか?
- 15. アンドロイドにシステムプロパティリスナーを書くことはできますか?
- 16. Facebook Connectに頼ることはできますか?
- 17. Referer HTTPヘッダーに頼ることはできますか?
- 18. WindowStaysOnTopHintに頼らずにHoudini上にウィジェットを表示させることはできません
- 19. ヘッダファイルを使用せずにcプログラムを書くことができます
- 20. SVN SSL証明書はPythonスクリプトで信頼できません
- 21. Pythonで書かれたプログラムをAppleScriptにすることはできますか?
- 22. PythonメタクラスとModGrammar
- 23. サンプルを提供せずにCsvProviderでヘッダーを書くことはできますか?
- 24. Pythonインタプリタを持たずにLLVMをビルドすることはできますか?
- 25. linuxにpython 3.6をインストールできない
- 26. DLLをコンパイルせずにASP.NETサイト内にクラスを書くことはできますか?
- 27. スマートフォンGPSの信頼性はどれくらいですか?ハッキングすることはできますか?
- 28. GrailsでSpringを書くことはできますか?
- 29. CでiPhoneのプログラムを書くことはできますか?
- 30. イーサネットベースのネットワークプログラムをC++で書くことはできますか?
あなたが気に留めたいのは、抽象メソッドのチェックです。しかし、abcsは[仮想サブクラス登録](https://docs.python.org/3/library/abc.html#abc.ABCMeta.register)もサポートしています。 –
@MartijnPietersはい、私が気にするのは、抽象メソッドのチェックだけです。 –
なぜこの質問が下落したのか分かりません... –