2011-05-22 51 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