python的__mro__与__slot__】的更多相关文章

class A(object): def __init__(self): print ' -> Enter A' print ' <- Leave A' class B(A): def __init(self): print ' -> Enter B' # A.__init__(self) super(B, self).__init__() print ' <- Leave B' class C(A): def __init__(self): print " ->…
本章内容: 创建类和对象 面向对象三大特性(封装.继承.多态) 类的成员(字段.方法.属性) 类成员的修饰符(公有.私有) 类的特殊成员 isinstance(obj, cls) & issubclass(sub, super) 异常处理 反射 单例模式 创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用. 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实…
http://www.codeweblog.com/python-mro-c3%E7%AE%97%E6%B3%95/ 在 python 2.2 之后,python 实现了一个新的MRO算法:C3算法,用于方法解析顺序 . 一.什么是方法解析顺序 方法解析顺序 :多重继承时,用于在子类中调用父类方法时确定调用哪个父类的方法 . 多重继承代码示例: #!/usr/bin/python #-*- coding:utf8 -*- class A(object): def echo(self): prin…
1.super的作用调用父类方法2.单继承使用示例 #coding:utf-8 #单继承 class A(object): def __init__(self): self.n=2 def add(self,m): self.n+=m class B(A): def __init__(self): self.n=3 def add(self,m): super(B,self).add(m) self.n+=3 b=B() b.add(3) print b.n 运行结果: super(B,self…
Python是面向对象的编程语言,也支持类继承. >>> class Base: ... pass ... >>> class Derived(Base): ... pass 这样就定义了两个类,Derived继承了Base.issubclass(a,b)能够測试继承关系: >>> issubclass(Derived, Base) True 在Python中,每一个类有一个__bases__属性,列出其基类 >>> Derived.…
刚刚学到类的多继承这个环节,当子类继承多个父类时,调用的父类中的方法具体是哪一个我们无从得知,为此,在Python中有函数__mro__来表示方法解析顺序. 当前Python3.x的类多重继承算法用的是C3 MRO序列: MRO是一个有序列表L,在类被创建时就计算出来.通用计算公式为:mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )其中Child继承自Base1, Base…
1 class Base(object): def text(self): print('------text-----') class A(Base): def text(self): print('------text1-----') class B(Base): def text(self): print('------text2-----') class C(A,B): def text(self): print('------text3-----') c = C() c.text()…
纲要: 本章总的来说是给实例添加属性,给类添加方法两个主题,以及相应的作用范围.总结如下: 1.给实例添加属性(作用范围:当然是只对当前实例有效): 2.用__slots__限制可以给实例添加的属性(作用范围:__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的,除非在子类中也定义__slots__): 3.用types模块中的MethodType方法给实例添加方法:(作用范围:给"实例-"当然是限制于本实例): 4.给类添加方法:(作用范围:对所有实例生效) 以…
在类中定义__slot__属性来限制实例的属性字段,在创建大量对象的场合可以减少内存占用. 创建大量对象是内存占用对比: 类中不使用__slot__ class MySlot:def __init__(self, a, b, c): self.a = a self.b = b self.c = c @profile() def main(): myObj_list = list() for i in range(50000): myObj = MySlot(i, i, i) myObj_list…
class Player(object): def __init__(self,name,age,life): self.name=name self.age=age self.life=life class Player1(object): __slots__=("name","age","life") def __init__(self,name,age,life): self.name=name self.age=age self.life…