2种可能性
代替isinstance(second, A)做isinstance(second.obj, A)
第二。。。更老套的做法是这样做:class B:
def __init__(self, obj):
self.obj = obj # obj is any object
self.__class__ = obj.__class__
这是一个很愚蠢的例子,因为这是一个很愚蠢的例子。即isinstance(second, B)将返回{}
为了回答下面提出的问题:解释器将基本上表现为second是一个类A,并且{}中在类级别定义的任何内容都不会保留。如果你做类似的事情
^{pr2}$
在使用解释器进行一些调用时,使用与上面初始化相同的代码。一般情况下,任何类变量或方法都将被删除并使用A'a,但是任何实例变量都会被记住。因此,self.obj = obj有点多余。基本上,实例化B(obj)将或多或少地返回与obj相同类的对象。虽然它不会调用obj的__init__,但是你需要更多的伏都教/魔法(如果你感兴趣的话,就发布)。在>>> isinstance(second, A)
True
>>> isinstance(second, B)
False
>>> second.a
1
>>> second.b
Traceback (most recent call last):
File "", line 1, in
second.b
AttributeError: A instance has no attribute 'b'
>>> second.someFunc()
Traceback (most recent call last):
File "", line 1, in
second.someFunc()
AttributeError: A instance has no attribute 'someFunc'
>>> second.b2
5
>>> second.obj