Add extra example

This commit is contained in:
Joe Farebrother
2025-07-30 15:52:26 +01:00
parent 2516f9452e
commit 63577f0cca
3 changed files with 26 additions and 9 deletions

View File

@@ -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>

View File

@@ -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

View File

@@ -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 {}