什么是魔术方法?

在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中的魔术方法的更多相关文章

  1. Python中的魔术方法详解

    介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中 ...

  2. Python中的魔术方法详解(双下方法)

    介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中 ...

  3. Python 类的魔术方法

    Python中类的魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic method ...

  4. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  5. PHP中的面向对象OOP中的魔术方法

    一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...

  6. 巧用PHP中__get()魔术方法

    PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用.比如 __construct() 每次实例化一个类都会先调用该方法进行初始化.这里我们讲一下__get() 魔术方法的 ...

  7. Python中的__new__()方法与实例化

    @Python中的__new__()方法与实例化   __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...

  8. python中的replace()方法的使用

    python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...

  9. Python中的字符串方法

    Python中的字符串方法 字符串类即str提供了许多有用的方法来操纵字符串.具体来说,我们将讨论如下的方法. 搜索字符串内的子字符串. 测试字符串. 格式字符串. 转换字符串. 回顾前面的章节,方法 ...

随机推荐

  1. Nginx 常用配置清单

    侦听端口: server {# Standard HTTP Protocollisten 80;# Standard HTTPS Protocollisten 443 ssl;# For http2l ...

  2. a.equals(b) 判断对象相等

    一.值是null的情况: 1.a.equals(b), a 是null, 抛出NullPointException异常. 2.a.equals(b), a不是null, b是null,  返回fals ...

  3. MySQL8.0的下载与安装

    下载 进入官网的下载页面 点击下图中的链接 可以选择上边的 Community Server ,那样会下载压缩包,这里我选择下边的 Installer for Windows ,下载的是安装包 点击下 ...

  4. vue路由history模式刷新404问题解决方案

    更改router 的base // biz是二级目录,路由文件改成 const router = new VueRouter({ mode: 'history', // base: process.e ...

  5. 使用 DML语句,对 “锦图网” 数据进行操作,聚合函数练习

    查看本章节 查看作业目录 需求说明: 根据客户 ID 统计订单数.订单总金额.最高订单金额.最低订单金额和每份订单平均金额,并按订单总金额升序显示 根据客户统计订单总订购人次数> 5 的统计信息 ...

  6. Android物联网应用程序开发(智慧城市)—— 查询购物信息界面开发

    效果: 布局代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  7. 【】Apache Ranger剖析:Hadoop生态圈的安全管家

    前言 2016年,Hadoop迎来了自己十周岁生日.过去的十年,Hadoop雄霸武林盟主之位,号令天下,引领大数据技术生态不断发展壮大,一时间百家争鸣,百花齐放.然而,兄弟多了不好管,为了抢占企业级市 ...

  8. django rest framework 自定义验证器

    一.基于钩子函数: 官网上的例子: 官方提示:如果字段声明在序列化类上时,就具有参数required=Fasle的作用,当函数名中没有包括字段名时,那么这个验证函数就不起作用 二.基于类的验证器: 使 ...

  9. 初识python 之 爬虫:使用正则表达式爬取“糗事百科 - 文字版”网页数据

    初识python 之 爬虫:使用正则表达式爬取"古诗文"网页数据 的兄弟篇. 详细代码如下: #!/user/bin env python # author:Simple-Sir ...

  10. JMeter_响应数据为空以及中文乱码

    一.响应数据为空 最近做测试接口,使用同样的请求方式.地址.参数和header,在postman中能正常响应,接收数据的也正常,但是在Jmeter中,虽然响应正常,但是响应数据却为空! Jmeter接 ...