第二部分 对象与内建函数
对象
xx: 公有变量
_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
__xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
__xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__ , __ 不要自己发明这样的名字
xx_:单后置下划线,用于避免与Python关键词的冲突
__init__(self,x,y) 初始化可以传参数 不需要返回值 self对象是__new__返回的值
__str__(self):实例字符串表示,可读性 print(类实例),如没实现,使用repr结果
__repr__ 实例字符串表示,准确性 类实例 回车 或者 print(repr(类实例))
__del__(self): 删除对象时默认调的方法 del 对象 来删除对象(引用计数减1)
__new__ (cls) return object.__new__(cls)还可以通过父辈的__new__
__dict__ 实例自定义属性 vars(实例.__dict__)
__doc__ 类文档,子类不继承 help(类或实例)
__getattribute__ 属性访问拦截器 访问实例属性时 object.__getattribute__(self,obj) no self.test
__bases__ 类的所有父类构成元素 类名.__bases__
__all__ 如果文件中有它,那么这个变量中的元素,不会被from xxx import *时导入
__class__ 实例所在的类 实例.__class__
__name__ 可以在模块中测试功能 一般 if __name__ ==__"main"
__metaclass__可以指定元类来创建对象
__slots__ 限制动态创建属性方法 __slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
调用父类 super
多态 定义时的类型和运行时的类型不一样,此时就成为多态 执行一个方法,只有在执行时才能知道执行的是父类,还是子类
python 的面 向对象的三个基本要素,封装继承多态
类属性,所有类对象和实例对象共有,内存只有一份 #实例属性会屏蔽掉同名的类属性
类方法 @classmethod 第一个参数必须是类对象,一般以cls作为第一个参数
静态方法 @staticmethod 静态方法中引用类属性的话,必须通过类对象来引用
内建函数 sorted 排序 reduce 累加元素 filter 过滤 map根据函数对指定序列映射 range 生成器partial函数(偏函数) 把一个函数的某些参数设置默认值,返回一个新的函数,调用这个新函数会更简单。
wraps函数 也是个装饰器,作用是避免函数文档被装饰器覆盖