Python - 将对象的属性复制到另一个属性的正确方法是什么?

oro*_*aki 11 python design-patterns

我有两节课.它们几乎完全相同,除了2个属性.我需要将所有属性从一个复制到另一个,我只是想知道是否有模式或最佳实践,或者我是否应该基本上做:

spam.attribute_one = foo.attribute_one
spam.attribute_two = foo.attribute_two
Run Code Online (Sandbox Code Playgroud)

... 等等.

Ale*_*lli 16

你给的代码是正确的,安全的,避免了应该"不小心"绑定属性被约束.但是,如果您喜欢自动化而不是安全性和正确性,那么您可以使用类似......的东西:

def blindcopy(objfrom, objto):
    for n, v in inspect.getmembers(objfrom):
        setattr(objto, n, v);
Run Code Online (Sandbox Code Playgroud)

但是,我不推荐它(由于第一段所暗示的原因;-).OTOH,如果您知道要复制的属性的名称,以下就可以了:

def copysome(objfrom, objto, names):
    for n in names:
        if hasattr(objfrom, n):
            v = getattr(objfrom, n)
            setattr(objto, n, v);
Run Code Online (Sandbox Code Playgroud)

如果您经常这样做,在"实用程序"模块中使用此代码一次就可以获得一定的胜利!

  • blindcopy-function中的for循环错过了in-operator. (2认同)