python - 动态地将函数分配给实例的 __dir__

标签 python

我正在尝试将函数动态分配给 __del__类的实例,以便在该对象上使用 dir() 时调用它。我需要__dir__对于类的每个实例都是唯一的。作为一个精简的例子,我尝试过:

import types
class Foo(object):
    def __init__(self, arg):
        def __dir__(self):
            print "in __dir__"
            return [arg]
        self.__dir__ = types.MethodType(__dir__, self, self.__class__)

foo = Foo('bar')
print dir(foo)
print
print foo.__dir__()

打印:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

in __dir__
['bar']

如果我这样做:

class Foo(object):
    def __dir__(self):
        print "in __dir__"
        return ['bar']

foo = Foo()
print dir(foo)

输出:

in __dir__
['bar']

如预期,但不能为类的每个实例进行自定义。有什么想法吗?

最佳答案

好的,根据你的评论我做了一些工作。我认为这可能更接近您正在寻找的行为。调用不带参数的 dir 会给出本地范围内的所有名称,而在 __class__ 上调用它会给出所有类名称。这会忽略定义的 __dir__ ,稍后可以调用它。我很好奇你用它来做什么,也许有一种更简单的方法来获得预期的行为?

class Foo(object):
    def __init__(self, arg=None):
        self.arg = arg
        print dir(self.__class__) + dir()

    def __dir__(self):
        return [self.arg()]


def dirfoo():
    return ["new thing"]

foo = Foo(dirfoo)

print dir(foo)

关于python - 动态地将函数分配给实例的 __dir__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4093607/

相关文章:

python - 在 Google DFS 文件夹中运行 jupyter 笔记本时出现 "Save and Checkpoint"错误

python xpath 空间没有被删除

python - 我的菜谱搜索程序(守护进程)的图像缓存循环出错

python - Pandas DataFrame 重新索引到最近的

python - 在多索引 pandas 列的子级别中创建新列

python - 无法将Bessel函数的结果放入numpy的数组中

python - 特定 bin 内 numpy 数组的元素数量

python - 通过输入uint8数组将图像读取到OpenCV(Numpy)

python - pygtk : free variable referenced before assignment in enclosing scope

python - 为什么 functools.partial 没有被检测为 types.FunctionType?