diff --git a/py/objobject.c b/py/objobject.c index 6a1393076d..db4fb689cb 100644 --- a/py/objobject.c +++ b/py/objobject.c @@ -47,8 +47,24 @@ STATIC mp_obj_t object_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const return o; } +#if MICROPY_CPYTHON_COMPAT +STATIC mp_obj_t object___init__(uint n_args, const mp_obj_t *args) { + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_1(object___init___obj, object___init__); +#endif + +STATIC const mp_map_elem_t object_locals_dict_table[] = { + #if MICROPY_CPYTHON_COMPAT + { MP_OBJ_NEW_QSTR(MP_QSTR___init__), (mp_obj_t)&object___init___obj }, + #endif +}; + +STATIC MP_DEFINE_CONST_DICT(object_locals_dict, object_locals_dict_table); + const mp_obj_type_t mp_type_object = { { &mp_type_type }, .name = MP_QSTR_object, .make_new = object_make_new, + .locals_dict = (mp_obj_t)&object_locals_dict, }; diff --git a/py/objtype.c b/py/objtype.c index ed45922748..5da49a0452 100644 --- a/py/objtype.c +++ b/py/objtype.c @@ -739,6 +739,7 @@ STATIC void super_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) { return; } } + mp_obj_class_lookup(self->obj, &mp_type_object, attr, 0, dest); } const mp_obj_type_t mp_type_super = { diff --git a/tests/basics/class_super_object.py b/tests/basics/class_super_object.py new file mode 100644 index 0000000000..21b97328ea --- /dev/null +++ b/tests/basics/class_super_object.py @@ -0,0 +1,15 @@ +# Calling object.__init__() via super().__init__ + +class Test(object): + def __init__(self): + super().__init__() + print("Test.__init__") + +t = Test() + +class Test2: + def __init__(self): + super().__init__() + print("Test2.__init__") + +t = Test2()