2016-11-11 69 views
0

在C++中,類的構造函數允許從另一個實例構造實例。例如Python中的另一個實例的實例

C::C(const C & c) { 
    bala...; 
    cc = c.cc; 
} 

在Python中,這是什麼類似的方式呢?我如何使用

c1 = C() 
c2 = C(c1) 

+0

有沒有Python中的編譯時類型。只要做'c2 = c1'。 –

+0

'bala'應該在那裏?你的問題很奇怪,你已經編寫了一個接受一個實例的C++代碼,並將它的屬性賦值給另一個實例,你爲什麼不在Python中做同樣的事情? –

+0

@DanielRoseman謝謝。我其實想在那裏多說一些。它也可以是cc =「這是一個副本」+ c.cc;類似的東西。 barak給出的答案也是同一個實例的副本。但我真的想要的不僅僅是一個副本。 – frankliuao

回答

0

我們在python中定義變量時沒有提及類型。例如:如果x=4,您隨時可以將x設置爲其他值,x="shasha"。沒有問題。

請注意,我們不能在Python中重載一個方法。

現在回到你的問題:

假設你理解了蟒蛇的內存管理和referenceactual value之間的區別,您可以使用deepcopy功能在Python:

import copy 
class A(object): 
    def __init__(self): 
     self.a=10 

x = A() 

y= copy.deepcopy(x) 

x.a=15 

print(y.a) # prints 10. 

請注意,您始終可以使用= operator將一個對象複製到另一個對象,如y = x,但它實際上不會複製任何內容。現在,引用y和x都將指向同一個實例。也就是說,如果你改變使用一個東西,它會自動反映到另外一個:

class A(object): 
    def __init__(self): 
     self.a=10 

x = A() 

y = x 

x.a=15 

print(y.a) # prints 15. 

你也可以創建一個虛擬的構造函數,如下面的例子中提到:

class A: 
    def __init__(self): 
     self.a=10 

    def dummy_constructor(self): 
     temp = A() 
     temp.a = (self.a + 20 - 5)*100/10 

     return temp 


x=A() 

y=x.dummy_constructor() 

print(y.a) #250 
print(x.a) #10 
+0

謝謝shasha。這是我想要的,但不完全是。我正在尋找類似於C++的東西,如果我在構造函數中定義像cc = c.cc(在我的原始文章中)或cc =「這是一個副本」+ c.cc,那麼您會自動知道它是另一個例子。類似的東西。如果你使用deepcopy,恐怕你必須自己做,比如x = A(),y = copy.deepcopy(x),y​​.a =「copy」+ x.a. – frankliuao

+0

你不能像在C++中那樣在python中創建一個拷貝構造函數。所以你將不得不採取一些替代方案。我更新了我的解釋並添加了一個替代方案。這對你有好處嗎? – Shasha99

相關問題