网站首页 > 技术文章 正文
特殊方法(特殊成员):这类方法名字特殊,有特殊用途,会自动调用。
因为特殊又会自动调用,大家也叫做魔术方法(魔法方法)。
特殊方法组成:固定命名-开头结尾都是双下划线。
下面说一下特殊方法及自动调用方式
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 = fun
def __call__(self, *args, **kwargs): # 1、__call__自动调用和返回内部函数
print('执行函数前')
result = self.fun(*args, **kwargs) # 2、内部函数引用外部函数变量
print('执行函数后')
return result
@Outer # 装饰器使用
def func(a):
print('普通函数')
return a
f = 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 = fun
def __get__(self, instance, owner):
def inner(*args, **kwargs):
print('执行函数前')
result = self.fun(instance, *args, **kwargs)
print('执行函数后')
return result
return inner
class A:
@Outer # 装饰器使用
def func(self, a):
return a
a = 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、可迭代对象
使用情况:基本不用我们自己写
__iter__():可迭代对象,for循环时 自动执行
如果类中有__iter__方法,就是可迭代对象
对象.__iter__()的返回值是迭代器
6、其他很多很多
使用情况:基本不用我们自己写
__str__() :print(对象) 自动执行
__dict__():类名.__dict__,自动调用,对象中封装的所有成员通过字典形式返回
__doc__():类名.__doc__ 时,自动调用,返回类都注释信息
__len__():使用len()函数时,自动调用
__add__():使用加号时,自动调用
还有很多很多,是不需要我们自己去写的,我们只知道,这类特殊方法是通过某种方式自动调用执行的就行了。
当然,如果你自己写的某个类中,希望以这样的方式运行,那你就自己去写对应都特殊函数就可以了。
比如咱们打印字符串对象 print('hello world') 返回值是hello world;如果你想在你写都类中,打印类对象时,显示【这是我自己写的类】,那你就在你自己的类中写一个__str__() 函数
class Person:
def __str__(self):
return '这是我自己写的类'
p = Person()
print(p) # 返回:这是我自己写的类
7、汇总参考(看看便于我们理解特殊方法)
- 上一篇: Python 类和方法
- 下一篇: 相见恨晚的10个Python类技巧
猜你喜欢
- 2025-03-07 深入理解 Python 元类:概念、语法与应用场景
- 2025-03-07 一文了解 Python 元类
- 2025-03-07 一文搞懂 Python 中的类和对象
- 2025-03-07 乐高python编程入门——类及其属性和方法
- 2025-03-07 Python 私有属性 & 私有方法
- 2025-03-07 如何理解Python类中的self?
- 2025-03-07 如何写好一个 Python的高质量的类
- 2025-03-07 Python 内部类:优雅地组织代码
- 2025-03-07 python入门040:根据类创建实例
- 2025-03-07 了解 Python 类和元类
- 265℃Python短文,Python中的嵌套条件语句(六)
- 264℃python笔记:for循环嵌套。end=""的作用,图形打印
- 263℃PythonNet:实现Python与.Net代码相互调用!
- 258℃Python实现字符串小写转大写并写入文件
- 257℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 117℃原来2025是完美的平方年,一起探索六种平方的算吧
- 98℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 90℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)