添加到实例的dir()

时间:2011-06-22 20:22:51

标签: python

我有一个带有一些实例变量的类(名为“A”)。我想将这些变量的dir()添加到A类实例的dir()中。

例如:

class A(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
class X(object):
    def f_x(self):
        pass
class Y(object):
    def f_y(self):
        pass

x = X(); y = Y()
a = A(x,y)

我希望f_x和f_y出现在

dir(a)

是否有更好的方法,或者更正确的方法,而不仅仅是迭代X. dict 和Y. dict ,对于每个元素,使用类似的方法:

setattr(A, str(element), element)

感谢。

2 个答案:

答案 0 :(得分:2)

为什么不直接从两个类继承?

class B(A, X):
    pass

a = B()
dir(a)

答案 1 :(得分:2)

在这种情况下,

A应该是XY的子类。 (在你深入研究之前,请务必阅读Michele Simionato's article on super and diamond inheritence。)

class X(object):
    def f_x(self):
        pass

class Y(object):
    def f_y(self):
        pass

class A(X, Y):
    def __init__(self, *args, **kwargs): # splats optional
        # do what you need to here

dir(A(X(),Y())) # Ah! Lisp!

但是,如果确实需要具备魔力,那么只需覆盖__getattr__的{​​{1}}即可查看Xself.x之前抛出一个错误。但严重的是,不要这样做。