Currently direct HasTraits subclasses warn when they receive unrecognized arguments:
|
def test_super_bad_args(): |
|
class SuperHasTraits(HasTraits): |
|
a = Integer() |
|
|
|
w = ["Passing unrecognized arguments"] |
|
with expected_warnings(w): |
|
obj = SuperHasTraits(a=1, b=2) |
|
assert obj.a == 1 |
|
assert not hasattr(obj, "b") |
However, this does not work with Configurable and its subclasses, although it is a subclass of HasTraits:
|
class Configurable(HasTraits): |

Context
This is implemented in:
|
try: |
|
super().__init__(*super_args, **super_kwargs) |
|
except TypeError as e: |
|
arg_s_list = [repr(arg) for arg in super_args] |
|
for k, v in super_kwargs.items(): |
|
arg_s_list.append(f"{k}={v!r}") |
|
arg_s = ", ".join(arg_s_list) |
|
warn( |
|
"Passing unrecognized arguments to super({classname}).__init__({arg_s}).\n" |
|
"{error}\n" |
|
"This is deprecated in traitlets 4.2." |
|
"This error will be raised in a future release of traitlets.".format( |
|
arg_s=arg_s, |
|
classname=self.__class__.__name__, |
|
error=e, |
|
), |
|
DeprecationWarning, |
|
stacklevel=2, |
|
) |
Related to #145.
Currently direct
HasTraitssubclasses warn when they receive unrecognized arguments:traitlets/tests/test_traitlets.py
Lines 2802 to 2810 in b0eaa6a
However, this does not work with
Configurableand its subclasses, although it is a subclass ofHasTraits:traitlets/traitlets/config/configurable.py
Line 53 in b0eaa6a
Context
This is implemented in:
traitlets/traitlets/traitlets.py
Lines 1381 to 1399 in b0eaa6a
Related to #145.