【循序渐进学Python】面向对象知多少——魔方方法
【循序渐进学Python】面向对象知多少——魔方方法
据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切。
他们是可以给你的类增加魔力的特殊方法,如果你的对象实现了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。
Python 的魔术方法非常强大,然而随之而来的则是责任。了解正确的方法去使用非常重要!
魔方方法
定义:
- 以两个下划线开头并且以两个下划线结束的方法叫做魔法方法
魔方方法的特点:
他们都会有一些特殊的功能
方法可以自动被调用
魔方方法的来源:
魔方方法一般情况下都是系统提供的方法,Python中的object对象的方法
如果想使用魔方方法必须要继承object
魔方方法会在特殊的情况下被Python调用
init(self)魔法方法
作用:
- 监听对象的实例过程
使用场景:
- 之前的类成员添加时,属性无法在类里面创建,使用 init(self)魔法方法可以在init(self)魔法方法中进行添加类的必要属性
注意:
- 自定义类中没有声明init(self)魔法方法,但是在新式类中默认使每个自定义类都继承了object类,因此所有的自定义类都具有init(self)魔法方法
- 如果为了能够完成自己想要的功能,可以自己定义init(self)魔法方法
- 如果当需要一个对象在诞生的时候就拥有某个功能,那么可以在init(self)魔法方法中实现
- 如果一个类需要统一的属性的时候,可以在init(self)魔法方法中为每个对象实现这些属性
参数:
- 无参的init(self)魔法方法用于:这个类实例的所有对象具有相同的属性值
- 有参的init(self)魔法方法用于:这个类实例的每个对象都必须要自己提供的属性值的时候
实例:
class Person1(object):def __init__(self, name, age):self.name = nameself.age = ageself.info()def info(self):print(f"我的名字叫{self.name},今年{self.age}岁")zs = Person1("张三", 20)
li = Person1("李四", 25)
str(self)魔法方法
作用:
- 追踪对象的属性值的变化的
使用场景:
- 当使用print输出对象的时候,只要定义了str(self)魔法方法,那么就会打印这个方法中return的数据
- str(self)魔法方法需要返回一个字符串,当做这个对象的描写
注意:
- str方法必须有一个返回值,返回值必须为字符串类型
- 默认情况下创建的对象返回的是一些对象的说明及对象所在位置的16进制的一个地址
- 如果一个类里面实现了str(self)魔法方法,那么创建的对象返回的就是这个方法所返回的字符串
参数:
- str方法不能再添加任何参数
实例:
class Person2(object):def __init__(self):self.name = "王五"self.age = 56def __str__(self):return "hello world"ww = Person2()
# 原本情况下ww接收到的是一个类的所在地的引用,使用了__str__(self)魔法方法之后
# ww接收到的是一个__str__(self)魔法方法返回的字符串的引用,
# 但是并非指的是将原来的类所在的引用替换了
print(ww)
print(id(ww))
del(self)魔法方法
作用:
- 监听对象被销毁的事情
使用场景:
- 创建对象后Python解释器默认会调用init(self)魔法方法
- 当每个对象被删除的时候,Python解释器也会默认调用一个方法,就是del(self)魔法方法
注意:
- 当这个对象的地址引用计数为0的时候才会被python给删除的,才会执行这个del方法
- 因此,如果一个数据或者对象在程序中没有任何引用的时候才会被系统释放
参数:
- del(self)魔法方法不能再添加任何参数
实例:
class Person3(object):def __init__(self):self.name = "刘六"def __del__(self):print("byby")ll = Person3()
【循序渐进学Python】面向对象知多少——魔方方法相关推荐
- 【循序渐进学Python】面向对象知多少——继承
[循序渐进学Python]面向对象知多少--继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制,那么今天我们来学习面向对象的第二大特征--继承. 继承 什么是继承 ...
- 循序渐进学Python:安装、使用与运行程序
Python这种语言的相关技术正在飞速的发展,用户数量急剧扩大,本文向读者介绍Python编程的有关知识. [51CTO.com独家特稿]Python是一种功能强大的解释执行自动编译的动态型语言,面向 ...
- python中数据读写_【循序渐进学Python——文件中数据的读写以及操作】
[循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] 相信大家都想过自己有一天,可以用 ...
- 【循序渐进学Python】Python中的循环(二)——while循环与嵌套
[循序渐进学Python]Python中的循环--while循环与嵌套 while循环(在给定的判断条件为 True 时执行循环体,False退出循环体) 当满足一定条件的时候才循环,具体循环多少次没 ...
- 【循序渐进学Python】Python中的循环(一)——for循环(嵌套)与range函数
[循序渐进学Python]Python中的循环(一)--for循环(嵌套)与range函数 在前面博客中我们介绍了Python程序结构的三要素,其中就提到了循环,而今天我们就来看看for循环和for循 ...
- Python面向对象反射,双下方法
一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- Python 面向对象之双下方法,内置函数
isinstance和issubclass isinstance(obj,cls) # 检查是否obj是否是类 cls 的对象 class Foo(object):passobj = Foo ...
- python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)
python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...
- 【循序渐进学Python】1. Python基础知识
1. Python安装和配置 首先需要到Python的官方网站(http://www.python.org/getit/) 下载安装包,现在Python的发行版分为兼容之前Python程序的Pytho ...
最新文章
- 前端之旅,正式启航~【前端学习路线图+配套学习视频+师长指点】
- 思维模型篇:数据分析必知必会的两个原则
- fixture.detectChange开始单步调试,如何执行到Directive的ngOnChange钩子
- opencv 检测几何图形_使用OpenCV + ConvNets检测几何形状
- xpath修复html错误,【python】xpath解析html文件报错:lxml.etree.XPathEvalError: Invalid expression...
- 极速办公(word)字体如何设置为斜体
- 17计算机病毒,计算机病毒的病毒的分类川大《计算机文化基础0008》17秋在
- AD9833产生DDS调试总结
- 计算机二级c语言考试题型及分值,全国计算机二级C语言考试题型及考试重点
- python人脸考勤系统_python人脸考勤系统Python3多进程 multiprocessing 模块实例详解
- 求 HCDA认证题库
- pytorch中加入注意力机制(CBAM),以ResNet为例。到底要不要用ImageNet预训练?如何加预训练参数?
- arduino定时器控制舵机_用 Arduino 控制舵机
- uniapp 二维码生成器 uQRCode
- 物联网背景的智慧农业 能否搭上顺风车
- windows7交互式服务检测如何禁用?
- MT6737芯片技术资料集锦下载
- 闲云旅游项目开发-(第一篇:使用Element-ui实现主页轮播图)
- GitChat·技术管理 | Cynefin 框架和不确定性管理思维
- Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) C】 Travelling Salesman and Specia
热门文章
- 重磅!GitHub突然宣布,对全球人免费开放全部核心功能
- 通俗讲解 依概率收敛,大数定理和中心极限定理
- 如何将域名http转换成https?
- python 倒数两列_100行Python代码实现每天不同时间段定时给女友发消息
- 看 Go 中的 struct 如何被优化,还有小插曲
- 什么是马甲APP?寻求高手马甲包封装APP上架
- 简单介绍快速开始使用Unity引擎的步骤
- HTML简单的网页制作期末作业【NBA勒布朗詹姆斯篮球明星】HTML+CSS+JavaScript
- Android:Umeng(友盟)消息推送(二)
- vue 中使用 marked + highlight.js 代码高亮