きれいなPython 3 super()
の構文をPython 2.5.6で使用できますか?
多分__future__
のようなものがありますか?Python 3スーパー()をPython 2.5.6で使用できますか?
答えて
型/クラスを持たない裸のsuper()
呼び出しは使用できません。また、それが機能するような代替品を実装することもできません。 Pythonの3.xのは、裸super()
呼び出しを(それはクラス内で定義されたすべての関数で__class__
セル変数を配置可能にするための特別なサポートが含まれている - これはひどい「ソリューション」であるPEP 3135
いいえできません。しかし、Python 3のPython 2のsuper()
をPython 3で使用することができます。
注を参照してください、私はそれを投稿しますあなたが自宅でこれを実行しませんを確認してください
私は繰り返します!これを行わない
一つは、このミックスインに
class Super(object):
def super(self):
return super(self.__class__, self)
を使用して考えることself.super()
を取得する :
得class A(object, Super):
def __init__(self):
print "A"
class B(A):
def __init__(self):
print "B"
self.super().__init__()
:
>>> a = A()
A
>>> b = B()
B
A
しかし、注意してください:をこのself.super()
はsuper(B, self)
と同等ではありません - A
もself.super().__init__()
呼び出された場合、B
の建設は、原因となるがself.__class__
はB
のままであるため、A
コンストラクタは無期限に呼び出されます。 。これは、accepted answerに記載されている__class__
の不足によるものです。この問題は、隠された状態マシンや洗練されたメタクラスなどで回避できます。実際のクラスの位置をself.__class__.mro()
にチェックしますが、それは本当に価値がありますか?おそらく...
私はこの質問が古いことを認識しており、選択された回答は当時正しいかもしれませんが、もはや完全ではありません。あなたはまだ2.5.6でsuper()
を使用することはできませんが、python-future
は2.6+のためのback-ported implementationを提供しています。
% pip install future
...
% python
...
>>> import sys
>>> sys.version_info[:3]
(2, 7, 9)
>>> from builtins import *
>>> super
<function newsuper at 0x000000010b4832e0>
>>> super.__module__
'future.builtins.newsuper'
>>> class Foo(object):
... def f(self):
... print('foo')
...
>>> class Bar(Foo):
... def f(self):
... super().f() # <- whoomp, there it is
... print('bar')
...
>>> b = Bar()
>>> b.f()
foo
bar
あなたがpylint
を使用する場合は、コメントでレガシーの警告を無効にすることができます
# pylint: disable=missing-super-argument
いいね、ありがとう:) –
- 1. Mac LionでのPython 2.5.6ビルドエラー
- 2. Python 3でクラッターを使用できますか?
- 3. Python 2.7またはPython 3(速度用)ですか?
- 4. AWSラムダでPython 3を使用
- 5. なぜPython 3はPyCharmで利用できませんか?
- 6. Python 3.xでは\ nをいつ使うべきですか?
- 7. Pythonクラス - コードのスーパー変数
- 8. Python 3(tkinter)ではフレームをアニメーション化できますか?
- 9. PythonをXCode 3でどのようにプログラムできますか?
- 10. Python 3を使用する利点/利点は何ですか?
- 11. Pythonでstring.formatでジェネレータを使用できますか?
- 12. socket ResourceWarningはPython 3でurllibを使用しています
- 13. Python 3:ロギングにマルチプロセッシングキューを使用する
- 14. DJANGOでPython標準ライブラリを使用できますか?
- 15. Pythonで「ソフトリファレンス」を使用できますか?
- 16. ArtifactoryをPython PIPで使用できますか?
- 17. Google Fusion TablesでPythonのCSVリーダーを使用できますか?
- 18. ライブラリ抽象をPythonで使用できますか?
- 19. 3rdparty pure PythonライブラリでCythonを使用できますか?
- 20. Visual StudioのPythonツールでpipを使用できますか?
- 21. UbuntuのデフォルトのPython 2.7をAnacondaで使用できますか?
- 22. Python 3:%sと.format()を使用
- 23. Python 3でのマルチプロセッシング
- 24. クライアントサイドのPythonはスレッドを使用できますか?
- 25. Python 3.xのsuper()魔法はなぜですか? Pythonの3.xでは
- 26. Emacsで複数のPythonシェルを使用するPythonまたはIPythonで 'python-mode'を使用する
- 27. PythonでSQLite 3のvacuumコマンドを使用する方法
- 28. python 3.xでstring.replace()を使用する方法
- 29. Macでpython 3.Xを使用するには?
- 30. DBUtilsをPython 3で使用するには?
感謝を。このPEPの以前のバージョンでは 'from __future__ import new_super'を使ってインポートすると言っていたので混乱しました。これはうまくいきません。 –