在Python

时间:2018-05-06 12:48:56

标签: python

我正在尝试覆盖Python类中的 dir 方法。在里面我想调用内置的dir方法,但我调用它的尝试似乎是调用我的方法,而不是默认的实现。

The correct way to override the __dir__ method in python 这个问题似乎很有意义,但没有回答这个问题,因为看起来他们的问题是扩展一个numpy类,而不是调用类的默认dir实现

相关代码

def __dir__(self):
    return builtins.dir(self) + self.fields()

换句话说,我想要通常列出的所有内容以及其他一些东西,但是builtins.dir()调用只是递归地调用这个函数。

我在Python 3.6中测试它

1 个答案:

答案 0 :(得分:0)

由于覆盖__dir__仅限课堂内的问题'实例,你可以这样做:

class Test:
    def test(self):
        print('hey')

    def __dir__(self):
        return dir(Test) + ['hello']

请注意,dir(Test)dir(Test())不同,因为只有后者才会调用Test.__dir__

dir(super())内使用Test.__dir__也有用,但它只为您提供类的数据,因此dir(Test())赢了包含仅在类Test中出现的属性的名称。