柏拉图的理想国
发表于 2019-7-12 16:41:12
NB!谢谢老师
MMM啊
发表于 2019-7-15 16:44:01
看不懂诶
lucky邪神
发表于 2019-8-17 13:12:21
努力塞
Jery_wang09
发表于 2019-8-24 18:02:22
最后一个看不懂,需要好好理解
anfree
发表于 2019-9-29 21:40:31
努力學習中~
lilinru75
发表于 2019-10-21 03:47:20
不太懂.. 还得加油啊.
qsxr
发表于 2019-12-27 09:16:03
额~~__bases__那个例子程序运行不出来,,,求解。。。
fqshct1994
发表于 2020-1-9 15:30:03
那么问题来了,__bases__ 和__dict__两个方法你都没讲,,, __bases__看着还能猜到,,但是__dict__完全就不知道了。
fqshct1994
发表于 2020-1-9 15:57:40
也不回复,出错了也没人解决,这个第三个代码出的云里雾里,也没有具体解释。。。我很好奇小甲鱼都在干什么,想充会员买题目的我看到这犹豫了
zmz1054920870
发表于 2020-1-11 00:05:32
本帖最后由 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)
这样我们可以执行了
zmz1054920870
发表于 2020-1-11 00:29:27
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,)
这样你就可以了
bo20000000
发表于 2020-1-16 13:43:25
看着头晕晕,{:10_266:}
F.K.
发表于 2020-1-29 16:30:41
感谢分享,Plug方法部分是python2.x吧,语法上有些和P.3不同
Emma_ma
发表于 2020-2-4 22:13:41
分解了第三段代码的执行逻辑大概如下,看起来像是把一个方法定义到了这个空类里,但是我现在还不太明白__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.
>>>
雯慧妹妹
发表于 2020-3-5 10:29:55
感谢分享,收藏
韩师兄
发表于 2020-4-25 10:23:55
基本上没看懂{:10_266:}{:10_266:}{:10_266:}
阿☆輝
发表于 2020-5-26 20:05:23
为啥试了案例__bases__第一行代码出现:
TypeError: Cannot create a consistent method resolution
order (MRO) for bases object, B
错误提示呀?
阿☆輝
发表于 2020-5-26 20:33:44
经过多次试验,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()
zaihebian
发表于 2020-6-3 09:53:42
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__() 运行结果是一样的,请问这里有什么区别呢??????
嚣张的稀粥
发表于 2020-6-3 15:04:06
{:10_269:}还需努力,噶油