枯萎的Python?

时间:2019-01-09 10:26:22

标签: python lombok boilerplate

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

在Python中有什么可比的吗?

(类似于Lombok的Python项目似乎如下,但它们没有此功能:

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

2 个答案:

答案 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]

这适用于大多数但不是全部对象。