gpt4 book ai didi

python - 如何覆盖类的 __dir__ 方法?

转载 作者:太空狗 更新时间:2023-10-30 00:31:08 25 4
gpt4 key购买 nike

我想为我的类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com