10行代码解释super最常用的情形
2016-04-29 15:26
330 查看
super类和多重继承,C3算法,Python属性查找及其钩子
descriptor描述符
结果
descriptor描述符
class super(object): def __init__(self, cls, instance): mro=instance.__class__.__mro__ self.instance=instance self.next_parent=mro[mro.index(cls)+1] def __getattribute__(self, name): get=object.__getattribute__ func=get(get(self, 'next_parent'), name) instance=get(self, 'instance') return lambda *args, **kwargs:func(instance, *args, **kwargs) class r(object): def f(self, *args, **kwargs): pass class a(r): def f(self, *args, **kwargs): print('a', args, kwargs) super(a, self).f(*args, **kwargs) class b(r): def f(self, *args, **kwargs): print('b', args, kwargs) super(b, self).f(*args, **kwargs) class c(r): def f(self, *args, **kwargs): print('c', args, kwargs) super(c, self).f(*args, **kwargs) class d(a, b): def f(self, *args, **kwargs): print('d', args, kwargs) super(d, self).f(*args, **kwargs) class e(b, c): def f(self, *args, **kwargs): print('e', args, kwargs) super(e, self).f(*args, **kwargs) class f(a, c): def f(self, *args, **kwargs): print('f', args, kwargs) super(f, self).f(*args, **kwargs) class g(d, e, f): def f(self, *args, **kwargs): super(g, self).f(*args, **kwargs) if __name__=='__main__': g().f(1, 2, 3, a=1, b=2, c=3)
结果
d (1, 2, 3) {'a': 1, 'c': 3, 'b': 2} e (1, 2, 3) {'a': 1, 'c': 3, 'b': 2} f (1, 2, 3) {'a': 1, 'c': 3, 'b': 2} a (1, 2, 3) {'a': 1, 'c': 3, 'b': 2} b (1, 2, 3) {'a': 1, 'c': 3, 'b': 2} c (1, 2, 3) {'a': 1, 'c': 3, 'b': 2}描述符
相关文章推荐
- Java 反射
- python中的datetime模块
- Java单例模式深入详解(转载)
- java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
- 一个带有点击效果和计时功能可圆角的自定义Button(支持XML和代码修改属性)
- 软件运行时的图标从文件中进行读取[C#]
- python_笔记13_装饰器
- Qt QThread 这是我 见过解析最全面的一片文章
- 关于java单例模式实现
- Python 中 os.path模板
- pyqt4 基本窗口,窗口布局,设置logo,窗口最大最小化
- pyinstaller生成exe笔记
- 一个简单python语言web server,输出机器上的HW信息
- 配置emacs python 开发环境
- php 正则应用
- 【LeetCode-109】Convert Sorted List to Binary Search Tree
- php返回的json格式
- php返回的json格式
- php返回的json格式
- Java---文件的切割与合并,已经实现图形界面(工具)