Python 枯萎?

Wither for Python?

在 Java 的 Lombok 中,有一项名为 wither 的功能可以克隆现有实例并仅更改它的一个属性 (wither)。

在Python中有什么可比较的吗?

(Python类似Lombok的项目好像有以下几种,但是没有这个功能:

  1. https://github.com/python-attrs/attrs
  2. https://pysynthetic.readthedocs.io/en/latest/
  3. https://github.com/IgniparousTempest/puffadder/)

您可以使用copy.copy

import copy

my_copy = copy.copy(my_obj)
my_copy.my_attribute = my_value

请注意,这执行的是浅拷贝,即所有对其他对象(如列表)的引用都将指向同一个对象。如果您需要 "deep" 副本,请改用 copy.deepcopy(my_obj)

这适用于大多数对象,但不是所有对象。

Python图书馆attrs provides this functionality with attr.evolve

这是从文档中复制的示例:

>>> @attr.s
... class C(object):
...     x = attr.ib()
...     y = attr.ib()
>>> i1 = C(1, 2)
>>> i1
C(x=1, y=2)
>>> i2 = attr.evolve(i1, y=3)
>>> i2
C(x=1, y=3)
>>> i1 == i2  # False
False