【发布时间】:2016-01-05 15:54:25
【问题描述】:
让我们考虑任何用户定义的pythonic 类。如果我调用dir(obect_of_class),我会得到它的属性列表:
['__class__', '__delattr__', '__dict__', '__dir__', ... '__weakref__', 'bases',
'build_full_name', 'candidates', ... 'update_name'].
您可以在此列表中看到 2 种类型的属性:
- 内置属性,
- 用户定义。
我需要覆盖__dir__,以便它只返回用户定义的属性。我怎么能这样做?
很明显,如果在被覆盖的函数中我调用它自己,它会给我无限递归。所以,我想做这样的事情:
def __dir__(self):
return list(filter(lambda x: not re.match('__\S*__', x), dir(self)))
但要避免无限递归。
一般来说,如果我不想从头编写,但想修改现有函数,如何修改内置函数?
【问题讨论】:
-
您是否尝试改用
dir(ClassName)?
标签: python python-3.x overriding built-in