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)
如果您经常这样做,在"实用程序"模块中使用此代码一次就可以获得一定的胜利!