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