【发布时间】:2015-04-29 02:34:59
【问题描述】:
假设您有以下类的实例:
class Foo(object):
def __init__(self, data):
self._data = data
foo = Foo({'bar': 'baz'})
当您执行dir(foo) 时,您会得到:
>>> dir(foo)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_data']
注意_data在属性列表的末尾
我想有一种方法来自定义 dir 为我的班级实例输出的内容。在这种特定情况下,我想将 _data 字典中的键值对添加为先前输出中的附加项,例如:
>>> dir(foo)
['__class__', '__delattr__', ..., '_data', 'bar']
注意_data AND bar 在属性列表的末尾
我认为会有一个 special 函数以类似的方式自定义它,就像您可以使用 __str__、__repr__ 等自定义实例一样,但没有找到任何相关信息还没有。
更新:我正在寻找只改变要显示的属性,而不改变实例__dict__ 的东西:
class Foo(object):
def __init__(self, data):
self._data = data
self.__dict__.update(data) # I would prefer not to do this
有没有办法做到这一点?提前感谢您的帮助!
【问题讨论】:
-
提供 __ dir __ 方法还不够吗?
-
是的,但我直到现在才知道。谢谢!
标签: python python-2.7 oop