Home >Backend Development >Python Tutorial >How Does `super()` Work Its Magic in Python 3.x Without Any Arguments?
Super() Magic in Python 3.x
In Python 3.x, the super() function boasts a unique ability: it can be invoked without any arguments. This behavior, while initially surprising, stems from a deliberate design choice introduced to address a common programming pitfall.
Avoiding DRY Violations and Class Name Ambiguity
Prior to Python 3.x, explicit naming of the class was required when invoking super(), as shown in the following code snippet:
<code class="python">class Foo(Bar): def baz(self): return super(Foo, self).baz() + 42</code>
However, this approach violated the DRY principle and was susceptible to class name ambiguity caused by global rebinding or class decorators. To mitigate these issues, Python 3.x introduced a magic implementation of super().
Leveraging a Class Cell for Runtime Resolution
The current implementation of super() employs a class cell. This cell provides access to the original class object, enabling super() to resolve the superclass at runtime without the need for explicit class naming. As a result, the following code works as intended, even if Foo is reassigned:
<code class="python">class Foo(Bar): def baz(self): return super().baz() + 42 Spam = Foo Foo = something_else() Spam().baz() # still works</code>
Compromise and Implementation Details
Initially, super() was proposed as a keyword, but concerns about the perception of it as "too magical" led to the current implementation. Guido van Rossum himself recognized the potential ambiguity of using a different name for super().
Potential Drawbacks
While the magic behavior of super() is generally beneficial, it can lead to unexpected results if the superclass is modified dynamically or if super() is renamed. In such scenarios, it is advisable to explicitly reference the class variable in the method to ensure proper functionality.
Alternative Examples of Functions Impacted by Renaming
Other Python functions and methods that can be affected by renaming include:
The above is the detailed content of How Does `super()` Work Its Magic in Python 3.x Without Any Arguments?. For more information, please follow other related articles on the PHP Chinese website!