Skip to content

Commit e9137b9

Browse files
committed
py: Implement getattr() builtin.
1 parent 9b196cd commit e9137b9

5 files changed

Lines changed: 25 additions & 0 deletions

File tree

py/builtin.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,3 +381,10 @@ STATIC mp_obj_t mp_builtin_id(mp_obj_t o_in) {
381381
}
382382

383383
MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_id_obj, mp_builtin_id);
384+
385+
STATIC mp_obj_t mp_builtin_getattr(mp_obj_t o_in, mp_obj_t attr) {
386+
assert(MP_OBJ_IS_QSTR(attr));
387+
return rt_load_attr(o_in, MP_OBJ_QSTR_VALUE(attr));
388+
}
389+
390+
MP_DEFINE_CONST_FUN_OBJ_2(mp_builtin_getattr_obj, mp_builtin_getattr);

py/builtin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ MP_DECLARE_CONST_FUN_OBJ(mp_builtin_dir_obj);
1212
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_divmod_obj);
1313
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_eval_obj);
1414
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_exec_obj);
15+
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_getattr_obj);
1516
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_hash_obj);
1617
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_id_obj);
1718
MP_DECLARE_CONST_FUN_OBJ(mp_builtin_isinstance_obj);

py/builtintables.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ STATIC const mp_builtin_elem_t builtin_object_table[] = {
6060
{ MP_QSTR_divmod, (mp_obj_t)&mp_builtin_divmod_obj },
6161
{ MP_QSTR_eval, (mp_obj_t)&mp_builtin_eval_obj },
6262
{ MP_QSTR_exec, (mp_obj_t)&mp_builtin_exec_obj },
63+
{ MP_QSTR_getattr, (mp_obj_t)&mp_builtin_getattr_obj },
6364
{ MP_QSTR_hash, (mp_obj_t)&mp_builtin_hash_obj },
6465
{ MP_QSTR_id, (mp_obj_t)&mp_builtin_id_obj },
6566
{ MP_QSTR_isinstance, (mp_obj_t)&mp_builtin_isinstance_obj },

py/qstrdefs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ Q(eval)
9292
Q(exec)
9393
Q(filter)
9494
Q(float)
95+
Q(getattr)
9596
Q(hash)
9697
Q(id)
9798
Q(int)

tests/basics/getattr1.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class A:
2+
3+
var = 132
4+
5+
def __init__(self):
6+
self.var2 = 34
7+
8+
def meth(self, i):
9+
return 42 + i
10+
11+
12+
a = A()
13+
print(getattr(a, "var"))
14+
print(getattr(a, "var2"))
15+
print(getattr(a, "meth")(5))

0 commit comments

Comments
 (0)