、super()
は、引数なしで呼び出すことができます。この作業を行うためにはPython 3.xのsuper()魔法はなぜですか? Pythonの3.xでは
class A(object):
def x(self):
print("Hey now")
class B(A):
def x(self):
super().x()
>>> B().x()
Hey now
は、いくつかのコンパイル時の魔法が行われ、1つの結果は、ことを次のコードです(これsuper_
にsuper
を再バインド)失敗:
super_ = super
class A(object):
def x(self):
print("No flipping")
class B(A):
def x(self):
super_().x()
>>> B().x()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in x
RuntimeError: super(): __class__ cell not found
なぜsuper()
RESすることができませんコンパイラの助けを借りずに実行時にスーパークラスをolveしますか?この動作、またはその根本的な理由が不注意なプログラマーに噛み込む可能性のある実用的な状況はありますか?
...そして、別の質問として、別の名前に再バインドすることで壊れる可能性のある関数、メソッドなどのPythonの他の例がありますか?
私はアーミンをもらおう(この[1]に説明を行うhttp://lucumr.pocoo.org/2010/1/7/pros-and-cons-about-python-3 /)を使用します。これはまた別の良い[投稿](http://lucumr.pocoo.org/2013/5/21/porting-to-python-3-redux/) –
に関連しています:http://stackoverflow.com/q/36993577/674039 – wim