Python – каков правильный способ скопировать атрибуты объекта другому?

У меня есть два класса. Они почти идентичны, за исключением двух атрибутов. Мне нужно скопировать все атрибуты из одного в другое, и мне просто интересно , есть ли образец или передовая практика, или если я просто буду в основном делать:

spam.attribute_one = foo.attribute_one spam.attribute_two = foo.attribute_two 

… и так далее.

2 Solutions collect form web for “Python – каков правильный способ скопировать атрибуты объекта другому?”

Код, который вы указываете, является правильным и безопасным, избегая «случайных» атрибутов привязки, которые не должны быть связаны. Если вы предпочитаете автоматизацию по безопасности и правильности, вы можете использовать что-то вроде:

 def blindcopy(objfrom, objto): for n, v in inspect.getmembers(objfrom): setattr(objto, n, v); 

Тем не менее, я бы не рекомендовал его (по причинам, указанным в первом параграфе ;-). OTOH, если вы знаете имена атрибутов, которые хотите скопировать, следующее:

 def copysome(objfrom, objto, names): for n in names: if hasattr(objfrom, n): v = getattr(objfrom, n) setattr(objto, n, v); 

Если вы часто это делаете, этот код один раз в модуле «Утилиты» может стать для вас определенной победой!

Если они похожи, и нужно изменить состояние, это звучит так, будто у вас действительно есть экземпляры одного класса, а также mode или аналогичный атрибут, определяющий, как он себя ведет. Объекты не должны переходить с одного объекта на другой, похожий, но отдельный объект, очень часто.

  • Обтекание объектов для расширения / добавления функциональности во время работы isinstance
  • switch case в python не работает; нужен другой шаблон
  • Как избежать чрезмерного прохождения параметров?
  • Вызов методов цепей с промежуточными результатами
  • Python - лучший язык программирования в мире.