NB!谢谢老师				
			
		看不懂诶				
			
		努力塞				
			
		最后一个看不懂,需要好好理解				
			
		努力學習中~				
			
		不太懂.. 还得加油啊. 				
			
		额~~__bases__那个例子程序运行不出来,,,求解。。。
				
			
		那么问题来了,__bases__ 和__dict__两个方法你都没讲,,, __bases__看着还能猜到,,但是__dict__完全就不知道了。				
			
		也不回复,出错了也没人解决,这个第三个代码出的云里雾里,也没有具体解释。。。我很好奇小甲鱼都在干什么,想充会员买题目的我看到这犹豫了				
			
		 本帖最后由 zmz1054920870 于 2020-1-11 00:06 编辑 
jiexinren 发表于 2015-8-3 16:04
这个在我电脑上无法运行啊(3.4.3,64位版本)
Traceback (most recent call last):
File "E:/桌面/j ...
我这里是针对 python 3.x 来说的哈    C.__bases__ 的作用是,调取C类的所以直接父类,他都没有进行继承,哪里来的父类,所以会报错。也可以说成C.__bases__ 是 class “__main__ .C ” 的一个父类,我们可以把代码改一下,把class C 改成class C(B)
这样我们可以执行了				
			
		jiexinren 发表于 2015-8-3 16:04
这个在我电脑上无法运行啊(3.4.3,64位版本)
Traceback (most recent call last):
File "E:/桌面/j ...
class A:
    def pA(self):
      print('我是A')
class B:
    def pB(self):
      print('我是B')
class C(Before_C):
    def c(self):
      pass
class Before_C:
      pass
C.__bases__+=(A,B,)
这样你就可以了				
			
		看着头晕晕,{:10_266:}				
			
		感谢分享,Plug方法部分是python2.x吧,语法上有些和P.3不同				
			
		分解了第三段代码的执行逻辑大概如下,看起来像是把一个方法定义到了这个空类里,但是我现在还不太明白__name__是一个内部的魔法方法吗?为什么给c的魔法字典里添加了新的映射关系就可以调用到这个方法了
>>> def get_a_value():
        print('a feature.')
        
>>> exported_methods = []
>>> exported_methods.append(get_a_value)
>>> exported_methods
<function get_a_value at 0x0000000002FD8550>
>>> class Combine:pass
>>> c = Combine()
>>> c.__dict__
{}
>>> c.__dict__ = exported_methods
>>> c.__dict__
{'get_a_value': <function get_a_value at 0x0000000002FD8550>}
>>> c.get_a_value()
a feature.
>>> 
				
			
		感谢分享,收藏				
			
		基本上没看懂{:10_266:}{:10_266:}{:10_266:}				
			
		为啥试了案例__bases__第一行代码出现:
TypeError: Cannot create a consistent method resolution
order (MRO) for bases object, B
错误提示呀?				
			
		经过多次试验,Python3中__bases__属性实现给类A添加类B特性的条件是:
A、B分别是一个继承类,且继承于不同的基类
【实例代码如下:】
class X:
        pass
class A(X):
        def get_a(self):
                print('a')
class Y:
        pass
class B(Y):
        def get_b(self):
                print('b')
A.__bases__
B.__bases__
A.__bases__ += (B,)
a = A()
a.get_b()				
			
		class PlugIn(object):
    def __init__(self):
      self._exported_methods = []
      
    def plugin(self, owner):
      for f in self._exported_methods:
            owner.__dict__ = f
    def plugout(self, owner):
      for f in self._exported_methods:
            del owner.__dict__
class AFeature(PlugIn):
    def __init__(self):
      super(AFeature, self).__init__()
      self._exported_methods.append(self.get_a_value)
    def get_a_value(self):
      print 'a feature.'
class BFeature(PlugIn):
    def __init__(self):
      super(BFeature, self).__init__()
      self._exported_methods.append(self.get_b_value)
    def get_b_value(self):
      print 'b feature.'
class Combine:pass
c = Combine()
AFeature().plugin(c)
BFeature().plugin(c)
c.get_a_value()
c.get_b_value()
问:super(AFeature, self)和super(BFeature, self)这两个参数为什么要放,我改成super().__init__() 运行结果是一样的,请问这里有什么区别呢??????				
			
		{:10_269:}还需努力,噶油