在Java的Lombok中,有一种名为wither
的功能,可以克隆现有实例并仅更改其一个属性(wither)。
在Python中有什么可比的吗?
(类似于Lombok的Python项目似乎如下,但它们没有此功能:
答案 0 :(得分:2)
Python库attrs通过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
答案 1 :(得分:1)
您可以使用_func
_func :: ALens' Weapon (f0 Float) -- Monomorphic
cloneLens _func :: Lens' Weapon (f0 Float) -- Polymorphic again
-- The ALens' type synonym usually appears in argument position
myFun :: ALens' Foo Bar -> MyResult
myFun _func = ...
-- Example usage
basedOn ^. cloneLens _func
toSetOn & cloneLens _func %~ ...
请注意,这会执行浅表复制,即对其他对象(如列表)的所有引用将指向同一对象。如果需要“深层”副本,请改用#Dictionary of expressions plot colors:
def ExpressionColor(x):
return {
0:'white',
1:'green',
2:'yellow',
3:'blue',
4:'magenta',
5:'cyan',
}[x]
。
这适用于大多数但不是全部对象。