Skip to content

Python: Modernise Superclass attribute shadows subclass method query #20142

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Prev Previous commit
Next Next commit
Add extra example
  • Loading branch information
joefarebrother committed Jul 30, 2025
commit 63577f0cca1f9346390c46a34893468172f6c4d5
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,14 @@ In the following example, the <code>_foo</code> attribute of class <code>A</code
Calls to <code>B()._foo()</code> will result in a <code>TypeError</code>, as <code>3</code> will be called instead.
</p>

<sample src="examples/SubclassShadowingGood.py" />
<sample src="examples/SubclassShadowingBad.py" />

<p>
In the following example...
In the following example, the behavior of the <code>default</code> attribute being shadowed to allow for customization during initialization is
intended in within the superclass <code>A</code>. Overriding <code>default</code> in the subclass <code>B</code> is then OK.
</p>

<sample src="examples/SubclassShadowingGood.py" />

</example>
</qhelp>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class A:
def __init__(self):
self._foo = 3

class B:
# BAD: _foo is shadowed by attribute A._foo
def _foo(self):
return 2

Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
class A:
def __init__(self):
self._foo = 3

class B:
# BAD: _foo is shadowed by attribute A._foo
def _foo(self):
return 2
def __init__(self, default_func=None):
if default_func is not None:
self.default = default_func

# GOOD: The shadowing behavior is explicitly intended in the superclass.
def default(self):
return []

class B(A):

# Subclasses may override the method `default`, which will still be shadowed by the attribute `default` if it is set.
# As this is part of the expected behavior of the superclass, this is fine.
def default(self):
return {}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy