Python对象转换

zol*_*i2k 28 python

假设我们有一个k类型的对象class A.我们定义了第二个class B(A).将对象"转换" kclass B并保留所有数据的最佳做法是什么k

jsb*_*eno 17

这会进行"类别转换",但会受到附带损害.创建另一个对象并将其替换__dict__为BrainCore发布会更安全 - 但是这个代码会按照您的要求执行,而不会创建新对象.

class A(object):
    pass

class B(A):
    def __add__(self, other):
        return self.value + other


a = A()
a.value = 5

a.__class__ = B

print a + 10
Run Code Online (Sandbox Code Playgroud)


Bra*_*ore 7

a = A() # parent class
b = B() # subclass
b.value = 3 # random setting of values

a.__dict__ = b.__dict__ # give object a b's values

# now proceed to use object a
Run Code Online (Sandbox Code Playgroud)

这会满足您的使用案例吗?注意:只能从对象a访问b的实例变量,而不能访问类B的类变量.此外,修改a中的变量将修改b中的变量,除非您执行深度复制:

import copy
a.__dict__ = copy.deepcopy(b.__dict__)
Run Code Online (Sandbox Code Playgroud)