想象一下,我有一个班级A
class A(object):
def __init__(self, x, y)
self.x = x
self.y = y
然后我定义了一个由B
初始化的类A
(而不是以A
为基础)和其他参数
class B(object):
def __init__(self, a):
if isinstance(a, A):
self.a = a
问题是,假设A
定义了大量变量,并且经常在B
中引用,是否有可能B
知道A
中的变量1}},以便B
我能做到
self.x
而不是
self.a.x
我知道变量的自动继承有点危险,甚至可能具有破坏性,但输入许多额外的self.a.x
看起来有点笨拙。可以选择暂时或在小代码片段中打开此继承应该是有用的。
修改
__dict__
基本上提出了所有内容,包括methods
和functions
,只能保留数字变量吗?
答案 0 :(得分:2)
你可以写:
class B(object):
def __getattr__(self, attr):
if hasattr(self.a, attr):
return getattr(self.a, attr)
else:
return object.__getattribute__(self, attr)
每当您访问B
的属性时,它都会检查a
是否具有该属性。如果是这样,它将返回。如果没有,它将在B
本身中查找属性。
答案 1 :(得分:1)
(更新为不包括方法):
class B(object):
def __init__(self, a, g):
if isinstance(a, A):
for k,v in a.__dict__.iteritems():
if not callable(v):
self.__dict__[k] = v
答案 2 :(得分:1)
class B(object):
def __init__(self, a):
self.__dict__.update(a.__dict__)
Python中的最佳做法通常不是使用isinstance()
检查类型,而是使用“duck typing”。我不知道你正在做什么的全部细节,所以我不知道你是否有合理的理由需要isinstance()
检查,但我没有它就写了上面的代码。
这会将B
的实例设置为与A
的实例具有相同的成员名称,并使用与这些名称绑定的相同值引用。