鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[扩展阅读] Python Mixin 编程机制(转)

  [复制链接]
发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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.__name__] = f

    def plugout(self, owner):
        for f in self._exported_methods:
            del owner.__dict__[f.__name__]

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__() 运行结果是一样的,请问这里有什么区别呢??????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 15:04:06 | 显示全部楼层
还需努力,噶油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-17 09:50:22 | 显示全部楼层
最后这个看了半天居然没有答案,个人理解是c实例化什么都没有,但是通过插入方法把其他类的方法插入到了C的dict从而扩展了c,这样c就拥有了get_a_value和b_get_b_value方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-21 16:56:18 | 显示全部楼层
C.__bases__ +=(A,B,)报错啊,3.8.3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-17 12:24:46 | 显示全部楼层
小甲鱼是大帅锅!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-19 21:13:04 | 显示全部楼层
请兄弟们帮助我理解下第三段代码吧,BALLBALL!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-12 05:22:12 | 显示全部楼层
学习!感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-12 18:19:19 From FishC Mobile | 显示全部楼层
不懂(=_=)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-20 17:08:50 | 显示全部楼层
好蒙。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-26 19:41:33 | 显示全部楼层
为什么在Python中用bases会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-6 15:25:33 | 显示全部楼层
cashchen17909 发表于 2017-7-27 13:53
f.__name__是啥意思呀。。哪位帮忙解释下。。

同问,这里看不懂,__name__一般不都是__main__么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-6 15:38:02 | 显示全部楼层
darksolitary 发表于 2019-2-18 12:12
# __bases__方法是查看某个类继承的所有父类
在python3.0+上(我也是猜测:因为我用的是小甲鱼推荐的3.0+ ...

请问f.__name__是什么呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-6 15:53:09 | 显示全部楼层
zaihebian 发表于 2020-6-3 09:53
class PlugIn(object):
    def __init__(self):
        self._exported_methods = []

同问,请问您知道了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-12 19:54:21 | 显示全部楼层
哪位同学的vip号能借我一下 我真的想学习 好人一生平安 ,没有恶意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 14:43:47 | 显示全部楼层
python3不行
>>> A.__bases__ += (B,)
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    A.__bases__ += (B,)
TypeError: Cannot create a consistent method resolution
order (MRO) for bases object, B
>>> class C:
        pass

>>> C.__bases__ += (A, B, )
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    C.__bases__ += (A, B, )
TypeError: Cannot create a consistent method resolution
order (MRO) for bases object, A, B
>>> B.__bases__ += (A, )
Traceback (most recent call last):
  File "<pyshell#30>", line 1, in <module>
    B.__bases__ += (A, )
TypeError: Cannot create a consistent method resolution
order (MRO) for bases object, A
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-4 22:44:04 | 显示全部楼层
不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-7 19:38:43 | 显示全部楼层
小甲鱼老师,为啥示范代码是Python2.X的语法?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 19:28:03 | 显示全部楼层
a feature.
b feature.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 19:28:39 | 显示全部楼层

结果是这个 ---第三个的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-3 11:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表