From 6b4fe5a0b93d3cc727e9771aed7801a13072982f Mon Sep 17 00:00:00 2001 From: Dave Hylands Date: Mon, 28 Dec 2015 20:03:15 -0800 Subject: [PATCH] py: Make dir report instance members --- py/modbuiltins.c | 14 +++++++++++++- tests/basics/builtin_dir.py | 7 +++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/py/modbuiltins.c b/py/modbuiltins.c index 9d1e90f578544..8ebf323c75503 100644 --- a/py/modbuiltins.c +++ b/py/modbuiltins.c @@ -31,6 +31,7 @@ #include "py/smallint.h" #include "py/objint.h" #include "py/objstr.h" +#include "py/objtype.h" #include "py/runtime0.h" #include "py/runtime.h" #include "py/builtin.h" @@ -196,6 +197,7 @@ STATIC mp_obj_t mp_builtin_dir(mp_uint_t n_args, const mp_obj_t *args) { // TODO make this function more general and less of a hack mp_obj_dict_t *dict = NULL; + mp_map_t *members = NULL; if (n_args == 0) { // make a list of names in the local name space dict = mp_locals_get(); @@ -214,6 +216,10 @@ STATIC mp_obj_t mp_builtin_dir(mp_uint_t n_args, const mp_obj_t *args) { dict = type->locals_dict; } } + if (mp_obj_is_instance_type(mp_obj_get_type(args[0]))) { + mp_obj_instance_t *inst = args[0]; + members = &inst->members; + } } mp_obj_t dir = mp_obj_new_list(0, NULL); @@ -224,7 +230,13 @@ STATIC mp_obj_t mp_builtin_dir(mp_uint_t n_args, const mp_obj_t *args) { } } } - + if (members != NULL) { + for (mp_uint_t i = 0; i < members->alloc; i++) { + if (MP_MAP_SLOT_IS_FILLED(members, i)) { + mp_obj_list_append(dir, members->table[i].key); + } + } + } return dir; } MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_dir_obj, 0, 1, mp_builtin_dir); diff --git a/tests/basics/builtin_dir.py b/tests/basics/builtin_dir.py index c7064c8caba21..70ab249603541 100644 --- a/tests/basics/builtin_dir.py +++ b/tests/basics/builtin_dir.py @@ -7,3 +7,10 @@ import sys print('platform' in dir(sys)) +class Foo: + def __init__(self): + self.x = 1 +foo = Foo() +print('__init__' in dir(foo)) +print('x' in dir(foo)) + pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy