mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Add extra example
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {}
|
||||
Reference in New Issue
Block a user