我定义了一个不可变的类,如这里所述。现在我想定义一个复制方法,它将给定实例的所有属性转移到一个新实例,并允许为任何现有属性提供新值。
这就是我所拥有的:
from operator import itemgetter
class Foo(tuple):
__slots__ = []
def __new__(cls, a, b, c):
return tuple.__new__(cls, (a, b, c))
a = property(itemgetter(0))
b = property(itemgetter(1))
c = property(itemgetter(2))
def copy(self, a='', b='', c=''):
return Foo(
a=a if a else self.a,
b=b if b else self.b,
c=c if c else self.c,
)
期望的行为:
instance_a = Foo('a', 'b', 'c')
instance_b = instance_a.copy(c='d')
assert instance_b.a == 'a'
assert instance_b.b == 'b'
assert instance_b.c == 'd'
问题:除了if else构造(即a=a if a else self.a)之外,是否有更优雅的方式在新属性和现有属性之间进行选择?
慕尼黑5688855
牧羊人nacy
相关分类