我想为我的类(class)更改 dir()
输出。通常,对于所有其他对象,这是通过在其类中定义自己的 __dir__
方法来完成的。但如果我为我的类(class)这样做,它就不会被调用。
class X(object):
def __dir__():
raise Exception("No!")
>>>dir(X)
['__class__', '__delattr__', '__dict__',....
如何更改类的 dir()
输出?
最佳答案
那是因为dir
调用了输入类型的__dir__
(等价于:type(inp).__dir__(inp)
) .对于类的实例,它将调用类 __dir__
,但如果在类上调用,它将调用元类的 __dir__
。
class X(object):
def __dir__(self): # missing self parameter
raise Exception("No!")
dir(X()) # instance!
# Exception: No!
因此,如果您想为您的类(而不是您的类的实例)自定义 dir
,您需要为您的 X
添加一个元类:
import six
class DirMeta(type):
def __dir__(cls):
raise Exception("No!")
@six.add_metaclass(DirMeta)
class X(object):
pass
dir(X)
# Exception: No!
关于python - 如何覆盖类的 __dir__ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46120462/