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:}还需努力,噶油