魔方方法:

在python的类中,以下划线开头,两个下划线结尾的方法,如常见的:init,str,__del__等,就被称为魔方方法,这些方法在类或对象进行特定的操作时会被自动调用,我们可以使用或重写这些魔方方法,给自定义的类添加各种特殊的功能来满足自己的需求。

常见的魔方方法:

init:

init()方法是我们最常见的魔方方法,可以用此方法定义一个对象的初始化操作。
例如:

class Car:
def __init__(self,Color,WheelNum):self.color = Color#初始化操作,不设定值self.wheelNum = WheelNum

new:

init()方法很容易被认为是在实例化对象时,调用的第一个方法,但其实不是,当我们实例化一个对象的时候,第一个被调用的方法是__new__(),而后再调用__init__()方法,并把一些参数传给__init__()方法,new()方法才是真正创建了实例化对象,init()方法只是给这个对象进行了初始化操作。
举例:

class Car:def __init__(self,color,wheelnum):print("__init__()方法被调用")self.color=colorself.wheelnum=wheelnumprint(id((self)))def __new__(cls, *args, **kwargs):#接收任意数量的位置实参和关键字实参print("__new__()方法被调用")print("args:",args)c=super().__new__(cls)#cls表示当前类print(id(c))return c#有返回,调用__init__函数
my_car=Car("蓝色",8)
__new__()方法被调用#new函数先被调用
args: ('蓝色', 8)
1955709945024
__init__()方法被调用
1955709945024

new()方法第一个参数必须是cls参数,表示当前类,其他参数是用来直接传递给__init__方法,__new__决定是否要使用该__init__方法,因为__new__可以调用其他类的构造方法或直接返回别的实例对象来作为本类的实例,如果__new__没有返回实例对象,则__init__不会被调用,__new__主要是用于继承一个不可变的类型,例如:元组或者字符串

del:

当一个对象的生命周期结束被彻底销毁的时候被调用,编译器会默认调用__del__方法.

class Car:def __init__(self,color,wheelnum):print("__init__()方法被调用")self.color=colorself.wheelnum=wheelnumdef __del__(self):print("__del__()方法被调用")#被调用后,该变量所占用的内存块被释放
my_car=Car("蓝色",8)
print(my_car.color)

__new__和__init__的id值相同,它两相配合才是python中真正的类构造器

__init__()方法被调用
蓝色
__del__()方法被调用

str:

如果要把一个类的实例变成str,就需要实现特殊方法__str__()

举例:

class Car:def __init__(self,color,wheelnum):print("__init__()方法被调用")self.color=colorself.wheelnum=wheelnumdef __str__(self):#将实例转化为字符串return (f"我的汽车颜色是{self.color},它有{self.wheelnum}个轮子")
my_car=Car("蓝色",8)
print(my_car)
__init__()方法被调用
我的汽车颜色是蓝色,它有8个轮子

setattr函数和getattr函数

setattr()函数用于设置属性,该属性不一定存在。

def __setattr__(object,key,value):#object---对象,key----字符串,对象属性,value----属性值

举例:

class Car:def __init__(self,color,wheelnum):print("__init__()方法被调用")self.color="红色"self.wheelnum=8
my_car=Car("蓝色",8)
print("设置属性前:")
print(my_car.color)
print(my_car.wheelnum)
setattr(my_car,"color","白色")#设置对象属性的值
setattr(my_car,"wheelnum",10)#设置对象属性的值
print("设置属性后:")
print(my_car.color)
print(my_car.wheelnum)
__init__()方法被调用
设置属性前:
红色
8
设置属性后:
白色
10

gatattr()函数用于获取属性。

def __getattr__(object,key)#object-----对象,key-----对象属性

举例:

class Car:def __init__(self,color,wheelnum):print("__init__()方法被调用")self.color="红色"self.wheelnum=8
my_car=Car("蓝色",8)
print(getattr(my_car,"color"))#输出对象对应属性的值
__init__()方法被调用
红色

类型转换相关魔方方法:

class Car:def __init__(self,color,wheelnum):print("__init__()方法被调用")self.color="红色"self.wheelnum=8def __int__(self):#将对应的属性wheelnum的值转化为int类型的结果并返回给__init__()函数return self.wheelnumdef __float__(self):#将对应的属性wheelnum的值转化为float类型的结果并返回给__init__()函数return self.wheelnum*1.0def __str__(self):#将对应的属性color的值转化为str类型的结果并返回给__init__()函数return self.colordef __bool__(self):#将对应的属性wheelnum判断的结果转化为bool类型的结果并返回给__init__()函数return self.wheelnum>5
my_car=Car("蓝色",8)
#强制类型转换
print(int(my_car))
print(float(my_car))
print(str(my_car))
print(bool(my_car))
__init__()方法被调用
8
8.0
红色
True

算数运算符相关的魔方方法:

class Student:def __init__(self,name,age):self.name=nameself.age=agedef __add__(self, other):#进行self.age+other的运算#并将self.age+实参的结果返回给__init__()函数return self.age+otherdef __sub__(self, other):return self.age-otherdef __mul__(self, other):return self.age*otherdef __truediv__(self, other):return self.age/otherdef __mod__(self, other):return self.age%otherdef __pow__(self, power, modulo=None):#平方和运算return self.age**power
s=Student("易烊千玺",22)
#算数运算
print(s+1)
print(s-2)
print(s*3)
print(s/4)
print(s%5)
print(s**6)
23
20
66
5.5
2
113379904

比较运算符相关的魔方方法:

class Student:def __init__(self,name,age):self.name=nameself.age=agedef __eq__(self, other):#比较对象的各个属性值是否都相等return self.name==other.name and self.age==other.agedef __lt__(self, other):#比较对象的某一属性之间的大小关系return self.age<other.agedef __le__(self, other):#比较对象的某一属性之间的大小关系return self.age<=other.age
student1=Student("易烊千玺",22)
student2=Student("王源",22)
student3=Student("王俊凯",23)
print(student1==student2)
print(student1!=student3)
print(student2==student3)
print(student1>=student2)
print(student1>=student3)
print(student2<=student3)
#比较运算符返回结果均为布尔值(False、True)
False
True
False
True
False
True

python之有关魔方方法的内容相关推荐

  1. python中的魔方方法

    python中的魔方方法 魔法方法 含义 基本的魔法方法 new(cls[, -]) 1. new 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 ...

  2. Python Day 9 魔方方法 -待理解

    目录 魔法方法 1.基本的魔法方法 2.算术运算符 3.反算术运算符 4.增量赋值运算符 5.一元运算符 6.属性访问 7.描述符 8.定制序列 9.迭代器 10.生成器 习题: 魔法方法 魔法方法总 ...

  3. Python常见的魔方方法

    1.doc 作用:查看文档字符串(DocStrings),用于解释文档程序,帮助你的程序文档更加简单易懂 使用:使用 doc(注意双下划线) def func():""" ...

  4. Python Day11 魔方方法

    Python种的魔方方法 Python种有许多魔方方法供我们使用 魔法方法被双下划线包围,例如__init__. 魔法方法的第一个参数应为cls(类方法) 或者self(实例方法). 下面介绍常见的魔 ...

  5. Day 07 类、魔方方法

    一.类 1.简单了解 在Python中,有整型.浮点型.字符串等这些对象.他们都有各自的属性和method,我们可以轻松地利用他们的这些属性和方法来对我们的数据进行处理和利用.而这些对象之间是有差异的 ...

  6. python方法测试怀孕_在Python中测试私有方法(例外)

    在阅读了关于在Python中测试私有方法的内容之后,特别是在How do I unit test the methods in a method object?处引用了接受的答案,看来最好只测试公共接 ...

  7. python中的请求方法_Python爬虫HTPP请求方法有哪些

    HTTP请求方法 GET:请求指定的页面信息,并返回实体主体. HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST:向指定资源提交数据进行处理请求(例如提交表单或者上 ...

  8. Python入门基础(下)之魔方方法

    Python入门基础(下)之魔方方法 一.学习内容概括 学习地址:https://tianchi.aliyun.com/s/58327c15d1faee512c008128d3bb9e32 今天主要学 ...

  9. Python基础刻意练习:魔方方法

    task11 Python的对象天生拥有一些神奇的方法,它们总是被双下划线包围,它们是面向对象的Python的一切. 下面针对几个常用的魔方方法来展开: 1.-str-和-repr- __str__相 ...

最新文章

  1. 网络配置——Linux入门到精通的难关之一
  2. Linux基础:让history记录命令的历史执行时间
  3. 力软 框架 转 mysql_快速web开发框架——learun framework
  4. Apache Shiro:简化应用程序安全性
  5. ASP.NET 页面生存周期概览
  6. ffmpeg录屏鼠标闪烁问题解决方法
  7. 用三张图看透 I/O,学习区分同异步阻塞
  8. java seqlist_java_实现链表以及链表的测试类
  9. 公司里面用的iTextSharp(教程)---关于PDF的属性设置
  10. 环境变量查看修改工具 RapidEE(Rapid Environment Editor)
  11. 数据分析入门-第四天
  12. Java 正则表达式之提取数字
  13. 申请一个微信小程序有哪些需要注意的事项
  14. 如何查询SCI和EI检索号
  15. vue + prerender + html-webpack-plugin 打包商桥项目报错
  16. 树的基本概念(定义、基本术语、性质)
  17. VS 调试时“还没有为该文档加载任何符号”
  18. 一个有趣的仿cmd小游戏(原创)
  19. jquery中append、prepend, before和after方法的区别
  20. Python 向爱人表白

热门文章

  1. 嵌入式有什么值得学习的软硬件技术?
  2. 计算机命令通配符,Windows的命令行怎么支持通配符
  3. ffmpeg官方下载网址
  4. 手动安装.ocx控件
  5. 用python简易英汉互译界面_python之做一个简易的翻译器(一)
  6. Docker运行报runc did not terminate successfully: exit status 127: unknown
  7. 充电器用着用着就松了怎么办_充电接口松动及插不紧的解决方法,看完你就知道了...
  8. 【字体分享】来一波免费的漂亮英文手写体(下)
  9. 马哥学习周总结第一周→linux简介、’文件系统及基础命令------李洋个人笔记。...
  10. PIOMAS Arctic sea ice thickness daily数据下载和IDL处理