class Main(object):
def __init__(self, config):
selt.attributes = config
def return_new_copy(self, additional_attributes):
addtional_attributes.update(self.attributes)
return Main(additional_attributes)
我想更新实例属性并返回相同类的新实例。我想我试图找出上面的代码是Pythonic还是一种肮脏的方法。由于此处未提及的几种原因,我无法使用classmethod。是否有另一种推荐的方法。
答案 0 :(得分:0)
您的return_new_copy
修改了传入的参数,这可能是不希望的。它还会沿错误的方向覆盖(优先级为self.attributes
)
我将其编写如下:
def return_new_copy(self, additional_attributes):
# python<3.5 if there are only string keys:
# attributes = dict(self.attributes, **additional_attributes)
# python<3.5 if there are non-string keys:
# attributes = self.attributes.copy()
# attributes.update(additional_attributes)
# python3.5+
attributes = {**self.attributes, **additional_attributes}
return type(self)(attributes)
一些细微之处: -我确保同时复制输入属性和自我属性 -我在自我属性之上合并了其他属性
如果您正在寻找可以自动执行此操作的内容,则可能要签出namedtuple
例如:
>>> C = collections.namedtuple('C', ('a', 'b'))
>>> x = C(1, 2)
>>> x
C(a=1, b=2)
>>> y = x._replace(b=3)
>>> y
C(a=1, b=3)
>>> x
C(a=1, b=2)