python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)
- 2019 年 10 月 7 日
- 筆記
今日临时总结的内容,可能还有些不正确的地方,初步当做个速查表吧。
类的内置函数(继承object的,自己重写)
内置函数 |
执行时机 |
注意点 |
调用案例 |
---|---|---|---|
__init__ |
实例化对象时 |
不允许写返回值(return None和不返回没区别)子类重写了__init__()方法要在子类中的__init__()方法调用父类的__init__方法(super(当前类, self).__init__(参数)) |
stu = Student() |
__new__ |
类实例化被调用时 |
|
stu = Studetn() |
__call__ |
调用对象时 |
要记得调用父类的 |
stu(__call__方法的参数) |
__str__ |
对象转为字符串时 |
必须return 字符串类型的返回值(默认返回值时类型+地址,没啥意义) |
print(stu) |
__del__ |
对象删除时(手动或程序结束、垃圾回收机制) |
|
del stu |
__getattr__ ( . 方法原理) |
用 .访问属性时 |
该属性不存在才执行,有__getattribute__方法会先执行__getattribute__方法 |
stu.gaewfg |
__setattr__ ( . 方法原理) |
用 .新增/修改属性时执行 |
|
stu.sex = 'male' |
__delattr__ ( . 方法原理) |
用del 对象.属性 删除属性时,执行 |
属性 被删除时才执行 |
del stu.age |
__getattribute__ |
用 .访问属性时 |
不管该属性有没有都会执行,写了这个方法后__getattr__需要自行调用 |
stu.age |
__getitem__ ( [] 原理) |
用 [属性名] 访问属性时 |
|
stu[age] |
__setitem__ ( [] 原理) |
用 [属性名] = 修改或新增属性时 |
|
stu[age] = 18 |
__delitem__ ( [] 原理) |
用 [属性名] 删除属性时 |
|
del stu[age] |
__gt__ __ge__ __eq__ __ne__ __lt__ __le__ 比较运算符(自定义比较规则) |
调用对应的比较符时 |
像__gt__ 和 __lt__ 这样的只需要指定一个即可 |
stu1 > stu2 |
__iter__ _next__ 迭代器协议 |
当成迭代取值对象时 |
|
for i in stu: … |
__enter__ __exit__ 上下文管理 |
跟在 with 后面时 |
|
with MyOpen(__enter__ 的参数) as m: |
类的内置属性(直接就可以调用的)
属性 |
作用 |
注意点 |
案例 |
---|---|---|---|
__dict__ |
返回调用者自身的名称空间 |
|
stu.__dict__ |
__class__ |
返回当前调用对象的类 |
|
|
__slots__ |
指定该类对象能所能拥有的全部属性,减少内存开销 |
会将类对象的属性给限制死,视情况使用,连__dict__都会被省掉 |
__slots__ = ['name'] # 加了以后再添加属性就不行了,限制属性 |
类.mro() |
获取到类的mro 列表,即类的查找顺序 |
python3中才有这个方法 |
|
类.__name__ |
返回类的类名 |
|
class_name = stu.__class__ |
面向对象相关内置方法(python解释器内置方法)
函数 |
作用 |
注意点 |
案例 |
---|---|---|---|
hasattr() |
判断某个对象是否存在某个属性 |
返回值是True / False |
hasattr(p, 'age') |
getattr() |
从对象中取出值 |
第三个位置默认值,不存在时返回默认值 |
getattr(p, 'age', None) |
setattr() |
为对象添加、修改属性 |
|
setattr(p, 'name', 'jackson') |
delattr() |
删除对象属性 |
|
delattr(p, 'school') |
locals() |
获取当前名称空间内的所有名字 |
直接修改无效 |
类的初始化函数初始化属性(__init__) |
isinstance() |
判断一个对象是不是某个类/某几个类的实例 |
第二参数可以传元组,返回值为 True/ False |
isinstance(obj1, (int, Student)) obj1是int 类型或者 Student 类型? |
issubclass() |
判断一个类是不是另一个类的子类 |
|
issubclass(type(obj), Animal) 对象obj 的类 是不是Animal的子类 |
越来越感觉时间不够用了,要加油呀! 一寸光阴一寸金,寸金难买寸光阴。