【发布时间】:2015-06-12 08:51:06
【问题描述】:
我有一个图书馆,有一个家长和十几个孩子:
# mylib1.py:
#
class Foo(object):
def __init__(self, a):
self.a = a
class FooChild(Foo):
def __init__(self, a, b):
super(FooChild, self).__init__(a)
self.b = b
# more children here...
现在我想用一个简单的(但有点特别,用于另一种方法)方法来扩展该库。所以我想改变父类并使用它的孩子。
# mylib2.py:
#
import mylib1
def fooMethod(self):
print 'a={}, b={}'.format(self.a, self.b)
setattr(mylib1.Foo, 'fooMethod', fooMethod)
现在我可以这样使用它了:
# way ONE:
import mylib2
fc = mylib2.mylib1.FooChild(3, 4)
fc.fooMethod()
或者像这样:
# way TWO:
# order doesn't matter here:
import mylib1
import mylib2
fc = mylib1.FooChild(3, 4)
fc.fooMethod()
所以,我的问题是:
- 这是好事吗?
- 这应该如何以更好的方式完成?
【问题讨论】:
-
你想达到什么目的?为什么需要动态添加方法?
-
@Pynchia,我在问如何做得更好。所以我必须使用
mylib1.Foo和 all 它的子类,并且我需要在所有这些 [子] 类中使用fooMethod。而且我不想继承所有内容。
标签: python parent-child parent setattr