tests/cpydiff: Add diff for overriding __init__.
This adds a CPython diff that explains why calling `super().__init__()` is required in MicroPython when subclassing a native type (because `__new__` and `__init__` are not separate functions). Signed-off-by: David Lechner <david@pybricks.com>
This commit is contained in:
parent
9ca668f881
commit
d1bf0eeb0f
31
tests/cpydiff/core_class_super_init.py
Normal file
31
tests/cpydiff/core_class_super_init.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
"""
|
||||||
|
categories: Core,Classes
|
||||||
|
description: When inheriting native types, calling a method in ``__init__(self, ...)`` before ``super().__init__()`` raises an ``AttributeError`` (or segfaults if ``MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG`` is not enabled).
|
||||||
|
cause: MicroPython does not have separate ``__new__`` and ``__init__`` methods in native types.
|
||||||
|
workaround: Call ``super().__init__()`` first.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class L1(list):
|
||||||
|
def __init__(self, a):
|
||||||
|
self.append(a)
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
L1(1)
|
||||||
|
print("OK")
|
||||||
|
except AttributeError:
|
||||||
|
print("AttributeError")
|
||||||
|
|
||||||
|
|
||||||
|
class L2(list):
|
||||||
|
def __init__(self, a):
|
||||||
|
super().__init__()
|
||||||
|
self.append(a)
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
L2(1)
|
||||||
|
print("OK")
|
||||||
|
except AttributeError:
|
||||||
|
print("AttributeError")
|
||||||
Loading…
x
Reference in New Issue
Block a user