如何使用Python中相同的参数在X的子方法中实例化类X?

如何使用Python中相同的参数在X的子方法中实例化类X?,python,python-3.x,constructor,initialization,instance-variables,Python,Python 3.x,Constructor,Initialization,Instance Variables,我有以下示例代码的示例: class X: def __init__(self, value): self.value = value def method_a(self): ... 现在我想在方法a中实例化一个新的X对象,重新使用值,即 def method_a(self): x = X(value = self.value) 现在,假设我在X的构造函数中设置了几个参数。是否有一种“pythonic”方法可以一次重新设置/复制所有参数?比如: def method_a(se

我有以下示例代码的示例:

class X:
 def __init__(self, value):
  self.value = value

 def method_a(self):
  ...
现在我想在方法a中实例化一个新的X对象,重新使用
值,即

def method_a(self):
 x = X(value = self.value)
现在,假设我在
X
的构造函数中设置了几个参数。是否有一种“pythonic”方法可以一次重新设置/复制所有参数?比如:

def method_a(self):
 x = X(self)
后者不起作用(“缺少1个必需的位置参数”)。我在文档中也找不到解决此问题的任何方法。

该模块可能就是您所需要的:

代码 更精细的控制: 在各种情况下,您可能只需要复制一些参数,这可以通过使用组合来管理要复制的较长列表来完成:

def method_a(self):
    attributes_to_copy = ('value1', 'value2')
    kwargs = {k: getattr(self, k) for k in attributes_to_copy}
    return type(self)(**kwargs)
测试代码:
def method_a(self):
    attributes_to_copy = ('value1', 'value2')
    kwargs = {k: getattr(self, k) for k in attributes_to_copy}
    return type(self)(**kwargs)
import copy

class X(object):
    def __init__(self, value1, value2):
        self.value1 = value1
        self.value2 = value2

    def method_a(self):
        return copy.copy(self)

    def method_b(self):
        attributes_to_copy = ('value1', 'value2')
        kwargs = {k: getattr(self, k) for k in attributes_to_copy}
        return type(self)(**kwargs)

x1 = X(1, 2)
x2 = x1.method_a()
x3 = x1.method_b()
assert x1.value1 == x2.value1
assert x1.value1 == x3.value1