MixIn 技术 (感谢 limdou 的介绍)
def MixIn(pyClass, mixInClass):
print "Mix class:",mixInClass, " into: ",pyClass,'\n'
pyClass.__bases__ += (mixInClass,)
class A:
def __init__(self):
self.name = "Class A"
def fun(self):
print self.name
class B:
def __init__(self):
self.name = "Class B"
def add(self, a,b):
print 'function defined in B'
return a + b
obj_a = A()
print obj_a
print dir(obj_a),'\n'
MixIn(A,B)
print obj_a
print dir(obj_a),'\n'
print obj_a.add(3,5)
-----------------------------------------〉
执行结果:
>>>
<__main__.a>
['__doc__', '__init__', '__module__', 'fun', 'name']
Mix class: __main__.B into: __main__.A
<__main__.a>
['__doc__', '__init__', '__module__', 'add', 'fun', 'name']
function defined in B
8
解释一下 MixIn 技术,就是使 一个类成为另一个类的基类, 这样会使 被 MixIn 的那个类具有了新的特性。
在例子程序中, 我们将 B 类 MixIn 进 A 类, 成为 A 的基类,于是, A 类的实例便具有了 B 类的方法(add)
obj_a = A() obj_a 是 类 A 的一个实例
print obj_a <__main__.a>
print dir(obj_a),'\n' ['__doc__', '__init__', '__module__', 'fun', 'name']
MixIn(A,B) 将B MixIn 进 A
print obj_a <__main__.a>
print dir(obj_a),'\n' ['__doc__', '__init__', '__module__', 'add', 'fun', 'name']
注意,这时候,多了一个 add 方法(类B 中定义)
print obj_a.add(3,5) 现在 A 的实例可以使用 B 中的方法了
No comments:
Post a Comment