修补Python中的类

int*_*tar 6 python monkeypatching class

假设我有一个Python类,我想添加一个额外的属性.

两者之间有什么区别吗?

import path.MyClass
MyClass.foo = bar
Run Code Online (Sandbox Code Playgroud)

并使用类似的东西:

import path.MyClass
setattr(MyClass, 'foo', bar)
Run Code Online (Sandbox Code Playgroud)

如果没有,为什么人们似乎做第二个而不是第一个?(例如http://concisionandconcinnity.blogspot.com/2008/10/chaining-monkey-patches-in-python.html)

Bli*_*ixt 11

这些语句是等价的,但是可以使用setattr,因为它是两者中最动态的选择(使用setattr可以使用变量作为属性名称.)

请参阅:http://docs.python.org/library/functions.html#setattr