Python 3.x の Super() は引数なしでどのように動作するのでしょうか?また潜在的な落とし穴は何ですか?

Patricia Arquette
リリース: 2024-10-28 01:58:01
オリジナル
977 人が閲覧しました

 How Does Python 3.x's Super() Work Without Arguments, and What Are the Potential Pitfalls?

Python 3.x のスーパー マジック: 謎を解く

Python 3.x では、super() メソッドに驚くべき工夫が導入されています。引数なしで呼び出します。この一見無害な変更は、内部に重大な結果と固有の魔法をもたらします。

魔法の発見

DRY 原則を維持するために、新しい super() 動作は明示的なクラスをバイパスします。ネーミング。これには、元のクラス オブジェクトを取得する特別な class セルがあり、以前のスーパー アプローチを悩ませていた再バインドの落とし穴を回避します。

魔法の結果

残念ながら、この魔法には欠点があります。 super() 名を super_ などの別の変数に再バインドすると、その機能が中断される可能性があります。これは、スーパーまたは クラス がメソッド内で参照される場合にのみセルが作成されるために発生します。

実際の落とし穴

この動作は、次のようなリスクを引き起こす可能性があります。疑いを持たないプログラマー:

  • super() を再バインドすると、予期しない例外が発生する可能性があります。
  • super(type(self), self) または super(self.__class__, self) に依存すると、結果が生じる可能性があります。派生クラスから呼び出された場合の無限再帰。
  • 新しいクラス オブジェクトを返すクラス デコレータは、super() へのクラス名バインディングを無効にする可能性があります。

Beyond Super()

興味深いことに、リバインドの問題の影響を受ける Python エンティティは super() だけではありません。その他の例としては、次のものが挙げられます。PyPy の RPython の

  • this (super() の __class__ に似ています)
  • 非バインド メソッド オブジェクト経由でアクセスされるインスタンス メソッド (@ を破壊する可能性があります)プロパティと @classmethod)
  • ドット表記なしで呼び出された場合の print、object、list などの組み込み

開発者への影響

super() の魔法は便利ですが、注意が必要です。その複雑さを理解することは、実行時エラーを防ぐのに役立ちます。再バインドを使用する場合、プログラマは class を明示的に参照するか、代替の super() 呼び出しメソッドを利用することを検討する必要があります。

以上がPython 3.x の Super() は引数なしでどのように動作するのでしょうか?また潜在的な落とし穴は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!