2011-05-22 41 views
2

我有一个代码(简化):铸造到其他类在Python

class A(object): 
    attrib1 = "a" 
    attrib2 = "b" 

class B(A): 
    flag = True 
在我的代码一些地方

,我有一个实例,但我需要创建B类的一个实例,它将有从A的实例中的所有数据......我觉得自己笨,但我不想做这样的事情:

class B(A): 
    def __init__(self,a1,a2,a3,a4,..): 
     self.a1 = a1 
     self.a2 = a2 

,并呼吁像:

obj_b = B(obj_a.a1, obj_a.a2,...) 

回答

4
class B(A): 
    def __init__(self, obj): 
     self.__dict__.update(obj.__dict__) 
+3

请注意,这通常是一个坏主意。验证'obj'的类型并仅复制重要的属性。 – 2011-05-22 21:56:04

+0

这会立即解决问题,我会尽快解决问题,但感谢您的警告。 – Vestel 2011-05-22 22:06:16

+0

'__dict__'可能不可用,如果使用'property',则会中断...另外,某些数据可能会在类中定义,因此它不会位于'obj .__ dict__'内部 – JBernardo 2011-05-22 22:45:09

1

另一种选择是改变你的A的实例变量__class__

a = A() 
a.__class__ = B