Python 枯萎?
Wither for Python?
在 Java 的 Lombok 中,有一项名为 wither
的功能可以克隆现有实例并仅更改它的一个属性 (wither)。
在Python中有什么可比较的吗?
(Python类似Lombok的项目好像有以下几种,但是没有这个功能:
您可以使用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
在 Java 的 Lombok 中,有一项名为 wither
的功能可以克隆现有实例并仅更改它的一个属性 (wither)。
在Python中有什么可比较的吗?
(Python类似Lombok的项目好像有以下几种,但是没有这个功能:
您可以使用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