什么是魔术方法?

在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. B. Arpa's weak amphitheater and Mehrdad's valuable Hoses

    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses time limit per test 1 second memory limit p ...

  2. 基于CA认证(结合文档在线预览)的电子签章解决方案

    分享一个基于CA认证(结合文档在线预览)的电子签章实现思路,恰巧是最近项目中遇到的,欢迎大家一起讨论. 一. 项目背景 在公司业务系统中,按照传统的签章方式,存在以下痛点: 1.成本高,体现在纸质合同 ...

  3. idea使用教程-常用设置

    [1]进入设置: [2]设置主题: [3]编辑区的字体变大或者变小: [4]鼠标悬浮在代码上有提示: [5]自动导包和优化多余的包: 手动导包:快捷键:alt+enter 自动导包和优化多余的包: [ ...

  4. CNN、RNN

    卷积神经网络有三个结构上的特性:局部连接,权重共享以及空间或时间上的次采样.这些特性使得卷积神经网络具有一定程度上的平移.缩放和扭曲不变性. CNN由可学习权重和偏置的神经元组成.每个神经元接收多个输 ...

  5. The Many Faces of Robustness: A Critical Analysis of Out-of-Distribution Generalization (DeepAugment)

    目录 概 主要内容 ImageNet-R StreetView StoreFronts (SVSF) DeepFashion Remixed DeepAugment 实验结论 代码 Hendrycks ...

  6. Capstone代商|Capstone代理商|Capstone选型

    Capstone专注于USB typec .Displaypor.hdmi.VGA.LVDS.MIPI 等端口音视频数据转换方案芯片的设计与开发,Capstone品牌起源于中国台湾,Capstone科 ...

  7. supervisor安装与基本使用

    supervisor简介 一般的,我们部署一个项目,我们希望它能在挂了之后能自动重启,这时就要用守护进程了,而supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程 ...

  8. html基础 下拉菜单和文本域的基本操作

    结构代码 所在城市: <select > <option selected>北京</option> <option>上海</option> ...

  9. gradle学习(一)

    projects和tasks 任何一个Gradle构建都是由一个或者多个project组成 每个project都有多个tasks构成 每个task都代表了构建执行过程中的一个原子性操作.例如 编译 打 ...

  10. 简述伪共享和缓存一致性MESI

    什么是伪共享 计算机系统中为了解决主内存与CPU运行速度的差距,在CPU与主内存之间添加了一级或者多级高速缓冲存储器(Cache),这个Cache一般是集成到CPU内部的,所以也叫 CPU Cache ...