python类的特殊方法-自动调用,你了解了吗?
特殊方法(特殊成员):这类方法名字特殊 , 有特殊用途 , 会自动调用 。
因为特殊又会自动调用 , 大家也叫做魔术方法(魔法方法) 。
特殊方法组成:固定命名-开头结尾都是双下划线 。
下面说一下特殊方法及自动调用方式
1、__init__():一般用来初始化类的参数 , 大家习惯叫做【构造方法】
使用情况:最多使用 , 一般的类都会使用
自动调用方式:生成对象(实例化类)的时候自动调用 。 如:类()
class Person:def __init__(self, name, age):print('执行__init__方法')p1 = Person('jack', 18)# 返回:执行__init__方法解读:实例化只执行__init__方法
2、__call__():告诉你类对象也可以当作函数来调用 , 一般叫【函数式调用】 。
使用情况:使用较少 , 装饰器用的多 。
自动调用方式:将对象当做函数时调用 。 如:对象()、类()()、装饰器
备注:如果某个类中写了这个方法 , 类的实例就变成可调用对象 , 可以像函数那样去调用 。
class Person:def __init__(self):print('执行__init__方法')def __call__(self, *args, **kwargs):print('执行__call__方法')p1 = Person()# 返回:执行__init__方法解读:实例化只执行__init__方法p1()# 返回:执行__call__方法解读:对象(当作函数)加小括号 , 执行__call__方法
class Outer:def __init__(self,fun):# 函数名作为参数self.fun = fundef __call__(self, *args, **kwargs):# 1、__call__自动调用和返回内部函数print('执行函数前')result = self.fun(*args, **kwargs)# 2、内部函数引用外部函数变量print('执行函数后')return result@Outer# 装饰器使用def func(a):print('普通函数')return af = func(3)print(f)# 返回:3
3、__get__():类中实现这个方法叫做描述器(__set__、__delete__)
使用情况:使用较少 , 装饰器用的多
自动调用方式:类作为另一个类的属性调用、装饰器
class A:def __init__(self):print('执行__init__方法')def __get__(self, instance, owner):print('执行__get__方法')class B:a = A()b = B()# 返回:执行__init__方法解读:实例化只执行__init__方法 , 不调用 __get__方法c = b.a# 返回:执行__get__方法解读:A类作为B类的属性调用时 , 执行__get__方法
class Outer:def __init__(self,fun):self.fun = fundef __get__(self, instance, owner):def inner(*args, **kwargs):print('执行函数前')result = self.fun(instance, *args, **kwargs)print('执行函数后')return resultreturn innerclass A:@Outer# 装饰器使用def func(self, a):return aa = A()print(a.func(3))
4、中括号取值
使用情况:基本不用我们自己写
__getitem__(item):list[1]、list[1:2:2] 切片或索引 自动执行
__setitem__(item):list[1]='123' 赋值 自动执行
__delitem__(item):del list[1] 删除值 自动执行
5、可迭代对象
【python类的特殊方法-自动调用,你了解了吗?】使用情况:基本不用我们自己写
__iter__():可迭代对象 , for循环时 自动执行
如果类中有__iter__方法 , 就是可迭代对象
对象.__iter__()的返回值是迭代器
6、其他很多很多
使用情况:基本不用我们自己写
__str__() :print(对象) 自动执行
__dict__():类名.__dict__() , 自动调用 , 对象中封装的所有成员通过字典形式返回
__doc__():类名.__doc__() 时 , 自动调用 , 返回类都注释信息
__len__():使用len()函数时 , 自动调用
__add__():使用加号时 , 自动调用
还有很多很多 , 是不需要我们自己去写的 , 我们只知道 , 这类特殊方法是通过某种方式自动调用执行的就行了 。
推荐阅读
- 计算机专业大一下学期,该选择学习Java还是Python
- 想自学Python来开发爬虫,需要按照哪几个阶段制定学习计划
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 小米11屏幕翻车发绿怎么回事 屏幕问题检测方法介绍
- 虾米音乐歌单可导入QQ音乐、网易云音乐 方法这
- 三星发布Galaxy Chromebook 2 配备QLED显示屏和特殊手写笔支持
- 1个手机怎么登录2个微信?方法很简单,看完我学会了
- 原来华为手机拍视频还能添加字幕,方法很简单,一学就会
- 原来华为手机隐藏扫描仪,3种方法,纸质档几秒电子化,一学就会
- 手机照片、视频怎样添加文字?原来很简单,4种方法一分钟搞定