我有一个带有一些实例变量的类(名为“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)
感谢。
答案 0 :(得分:2)
为什么不直接从两个类继承?
class B(A, X):
pass
a = B()
dir(a)
答案 1 :(得分:2)
A
应该是X
和Y
的子类。 (在你深入研究之前,请务必阅读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}}即可查看X
和self.x
之前抛出一个错误。但严重的是,不要这样做。