gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:48 26 4
gpt4 key购买 nike

我正在尝试将函数动态分配给 __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/

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