VeL*_*err 5 python overriding built-in python-3.x
让我们考虑任何用户定义的pythonic类.如果我打电话dir(obect_of_class),我会得到它的属性列表:
['__class__', '__delattr__', '__dict__', '__dir__', ... '__weakref__', 'bases',
'build_full_name', 'candidates', ... 'update_name'].
Run Code Online (Sandbox Code Playgroud)
您可以在此列表中看到两种类型的属性:
我需要覆盖__dir__它,它将只返回用户定义的attribltes.我怎么能这样做?
很明显,如果在重写函数中我自称,它会给我无限递归.所以,我想做这样的事情:
def __dir__(self):
return list(filter(lambda x: not re.match('__\S*__', x), dir(self)))
Run Code Online (Sandbox Code Playgroud)
但逃避无限递归.
一般情况下,如果我不想从头开始编写但想要修改现有函数,如何修改内置函数?
使用super调用父的实现__dir__; 避免递归:
import re
class AClass:
def __dir__(self):
return [x for x in super().__dir__() if not re.match(r'__\S+__$', x)]
def method(self):
pass
Run Code Online (Sandbox Code Playgroud)
>>> dir(AClass())
['method']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |