Skip to content

Commit 75ffcae

Browse files
committed
py: Implement __delitem__ method for classes.
1 parent bc9ec50 commit 75ffcae

2 files changed

Lines changed: 14 additions & 6 deletions

File tree

py/objtype.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -309,16 +309,20 @@ STATIC bool class_store_attr(mp_obj_t self_in, qstr attr, mp_obj_t value) {
309309
}
310310

311311
bool class_store_item(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
312+
mp_obj_class_t *self = self_in;
313+
mp_obj_t member;
314+
uint meth_args;
312315
if (value == MP_OBJ_NULL) {
313316
// delete item
314-
// TODO implement me!
315-
return false;
317+
member = mp_obj_class_lookup(self->base.type, MP_QSTR___delitem__);
318+
meth_args = 2;
319+
} else {
320+
member = mp_obj_class_lookup(self->base.type, MP_QSTR___setitem__);
321+
meth_args = 3;
316322
}
317-
mp_obj_class_t *self = self_in;
318-
mp_obj_t member = mp_obj_class_lookup(self->base.type, MP_QSTR___setitem__);
319323
if (member != MP_OBJ_NULL) {
320324
mp_obj_t args[3] = {self_in, index, value};
321-
mp_call_function_n_kw(member, 3, 0, args);
325+
mp_call_function_n_kw(member, meth_args, 0, args);
322326
return true;
323327
} else {
324328
return false;

tests/basics/class_item.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# test class with __getitem__ and __setitem__ methods
1+
# test class with __getitem__, __setitem__, __delitem__ methods
22

33
class C:
44
def __getitem__(self, item):
@@ -8,6 +8,10 @@ def __getitem__(self, item):
88
def __setitem__(self, item, value):
99
print('set', item, value)
1010

11+
def __delitem__(self, item):
12+
print('del', item)
13+
1114
c = C()
1215
print(c[1])
1316
c[1] = 2
17+
del c[3]

0 commit comments

Comments
 (0)