柏拉图的理想国 发表于 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:}还需努力,噶油
页: 1 2 3 4 [5] 6 7
查看完整版本: Python Mixin 编程机制(转)