Python中的魔术方法
什么是魔术方法?
在Python中,所有用"__"包起来的方法,都称为【魔术方法】。
魔术方法一般是为了让显示器调用的,你自己并不需要调用它们。
__init__:初始化函数
这个方法主要是定义了对象的初始化操作。当我们新建一个对象 x=someclass() 的时候,__new__先创建类并返回类的实例,然后自动调用__init__来初始化函数的值。这两个共同构成了【构造函数】。在对象生命周期调用结束时,__del__ 方法会被调用,可以将__del__理解为“构析函数”。
__str__与__repr__ 都是改变对象的字符串显示。
如果类中定义了这个方法,当打印这个类的某个实例对象时,实际上就是在调用这个方法,打印出来的结果就是该方法所返回的值。
class PersonInfo:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}的个人信息"
one_person = PersonInfo("星星", 20)
print(one_person)
print(str(one_person))
运行的结果是:
星星的个人信息
星星的个人信息
我们看到,print(one_person) 与 print(str(one_person)) 结果是一致的。其实,str(),当str(one_person)的时候,也就是在调用对象one_person的__str__方法。
当类中没有定义这个方法的时候,它们俩都会自动寻找__repr__这个魔术方法。
__getitem__(self,key):返回键对应的值。
__setitem__(self,key,value):设置给定键的值
__delitem__(self,key):删除给定键对应的元素。
__len__():返回元素的数量
class PersonInfo:
def __init__(self, name, age):
print("调用__init__")
self.name = name
self.age = age
self.one_dict = {}
def __setitem__(self, key, value):
print("调用__setitem__")
try:
self.one_dict[key] = value
except:
print("setitem有异常啊")
def __getitem__(self, item):
print("调用__getitem__")
try:
return self.one_dict[item]
except:
print("getitem有异常啊")
def __len__(self):
return len(self.one_dict) + 3
one_person = PersonInfo("星星", 20)
one_person["school"] = "振华中学"
one_person["hobby"] = "学习"
one_person["ablilty"] = "编程"
print(one_person["school"])
print(one_person[1])
print(len(one_person))
运行的结果:
调用__init__
调用__setitem__
调用__setitem__
调用__setitem__
调用__getitem__
振华中学
调用__getitem__
getitem有异常啊
None
6
Python中的魔术方法的更多相关文章
- Python中的魔术方法详解
介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中 ...
- Python中的魔术方法详解(双下方法)
介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中 ...
- Python 类的魔术方法
Python中类的魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic method ...
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...
- PHP中的面向对象OOP中的魔术方法
一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...
- 巧用PHP中__get()魔术方法
PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用.比如 __construct() 每次实例化一个类都会先调用该方法进行初始化.这里我们讲一下__get() 魔术方法的 ...
- Python中的__new__()方法与实例化
@Python中的__new__()方法与实例化 __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...
- python中的replace()方法的使用
python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...
- Python中的字符串方法
Python中的字符串方法 字符串类即str提供了许多有用的方法来操纵字符串.具体来说,我们将讨论如下的方法. 搜索字符串内的子字符串. 测试字符串. 格式字符串. 转换字符串. 回顾前面的章节,方法 ...
随机推荐
- 【LeetCode】659. Split Array into Consecutive Subsequences 解题报告(Python)
[LeetCode]659. Split Array into Consecutive Subsequences 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...
- Quoit Design(hdu1007)
---恢复内容开始--- Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- MySQL 的性能
影响数据库性能的因素: SQL 脚本 数据库服务器配置 网卡流量 磁盘 IO 大表操作 大事务操作 存储引擎 数据库参数配置 1. SQL 脚本 超高的 QPS 和 TPS TPS:英文全称是 Tra ...
- 论文翻译:2020_Joint NN-Supported Multichannel Reduction of Acoustic Echo, Reverberation and Noise
论文地址:https://ieeexploreieee.fenshishang.com/abstract/document/9142362 神经网络支持的回声.混响和噪声联合多通道降噪 摘要 我们考虑 ...
- 使用 JavaScript 中的 document 对象的属性,根据下拉框中选择的属性,更改页面中的字体颜色和背景颜色
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 document 对象的属性,根据下拉框中选择的属性,更改页面中的字体颜色和背景颜色 实现思路: 在页面的 <body&g ...
- Kafka单机安装Version1.0.1(自带Zookeeper)
1.说明 Kafka单机安装,基于版本1.0.1, 使用kafka_2.12-1.0.1.tgz安装包, 其中2.12是编译工具Scala的版本. 而且不需要另外安装Zookeeper服务, 使用Ka ...
- MongoDB性能诊断工具
1. mongostat * dirty 超过20%时阻塞新请求 * used 超过95%时阻塞新请求 * qrw 排队的请求 * conn 连接数量 mongostat:用于了解MongoDB运行状 ...
- MongoDB分片集群搭建及扩容
### 实验:分片集群搭建及扩容#### 实验目标及流程 * 目标:学习如何搭建一个两分片的分片集群 * 环境:3台Linux虚拟机器,4Core 8GB * 步骤: * 配置域名解析 * 准备分片目 ...
- [转]Python3字符串前缀u、b、r
1.无前缀 & u前缀 字符串默认创建即以Unicode编码存储,可以存储中文. string = 'a' 等效于 string = u'a' Unicode中通常每个字符由2个字节表示 ...
- SQL Server数据库出现“无法访问数据库XXX(objectExplorer)”的解决办法
数据库版本为2008R2,服务器异常重启并重新挂载iscsi后,数据库出现"无法访问数据库XXX(objectExplorer)"问题. 输入SQL命令查看数据库状态 1 sele ...