1
我想动态地分配一个函数__del__
的一个类的实例,以便它在该对象上使用dir()时被调用。我需要__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']
如预期的那样,但不能为每个i定制班级的真实性。有任何想法吗?
这将在正常情况下工作。不过,我的情况有点奇怪,因为我实际上需要在'__init__'期间调用dir(),并且当时我需要得到正常的dir()输出(没有自己定义的__dir__')。在那次调用之后,我想定义我的'__dir__'方法。 – Tommy 2010-11-04 03:35:40
dir(self .__ class__)就是答案!我没有想过这样做。我甚至不需要在实例属性中存储任何东西。 – Tommy 2010-11-04 04:21:17
我必须这样做的原因是因为我已经重写了'__getattr__',因此,当访问实例的属性并且该属性不存在时,将为该属性自动创建预定类型的对象。 – Tommy 2010-11-04 04:22:23