【问题标题】:Instance from another instance in Python [duplicate]Python中另一个实例的实例[重复]
【发布时间】:2016-11-11 11:23:37
【问题描述】:

在 C++ 中,类的构造函数允许从另一个实例构造一个实例。例如

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

在 Python 中,类似的方法是什么?我该如何使用

c1 = C()
c2 = C(c1)

?

【问题讨论】:

  • Python 中没有编译时类型。只需c2 = c1
  • bala 应该是什么?你的问题很奇怪;你已经编写了 C++ 代码,它接受一个实例,并将其属性分配给另一个实例,为什么不在 Python 中做同样的事情?
  • @DanielRoseman 谢谢。我其实还想说点什么。也可以是 cc = "这是一个副本" + c.cc;类似的东西。巴拉克给出的答案也是同一个实例的副本。但我真的想要的不仅仅是一份副本。
  • @barakmanos 谢谢。您的解决方案提供了 c1 的副本,但在 C++ 中,构造函数中可以包含更多内容,就像我在回复 Daniel 时所说的那样。
  • @frankliuao,您的问题现在解决了吗?我的回答有帮助吗?

标签: python c++ class constructor


【解决方案1】:

我们在 python 中定义变量时没有提及类型。例如:如果x=4,您始终可以将 x 设置为其他值,x="shasha"。完全没问题。

请注意,我们不能在 python 中重载方法。

回到你的问题:

假设您了解python内存管理以及referenceactual value之间的区别,您可以在python中使用deepcopy功能:

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

【讨论】:

  • 谢谢莎莎。这是我想要的,但不完全是。我一直在寻找类似于 C++ 的东西,如果我在构造函数中定义 cc = c.cc(在我的原始帖子中)或 cc =“这是一个副本”+ c.cc,那么你会自动知道它是另一个例子。类似的东西。如果用deepcopy,恐怕得自己动手了,比如x=A(), y=copy.deepcopy(x), y.a="copy" + x.a.
  • 你不能像在 c++ 中那样在 python 中创建复制构造函数。因此,您将不得不选择一些替代方案。我已经更新了我的解释并添加了一个替代方案。这对你有好处吗?
猜你喜欢
  • 1970-01-01
  • 2018-02-15
  • 2013-01-18
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2021-04-02
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多