当前位置: 首页 > news >正文

做网站购买服务器seo技术中心

做网站购买服务器,seo技术中心,青岛app开发公司排行榜,推广业务网站建设欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、什么是魔术方法?二、常见的魔术方法① __init__构造方法② __str__字符串方法③ __lt__比较方法④ __le__比较方法⑤ __eq__比较方法 前言 本章将详细讲…

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!

文章目录

  • 前言
  • 一、什么是魔术方法?
  • 二、常见的魔术方法
    • ① __init__构造方法
    • ② __str__字符串方法
    • ③ __lt__比较方法
    • ④ __le__比较方法
    • ⑤ __eq__比较方法


前言

本章将详细讲解 Python 的魔术方法,包括其定义以及一些常见的具体实现。


本篇文章参考:黑马程序员

一、什么是魔术方法?

①定义
在Python中,魔术方法(也称为特殊方法或双下方法)是以双下划线开始和结束的方法。这些方法提供了对Python内置操作的自定义实现,从而允许用户控制对象的行为。魔术方法通常不直接调用,而是由Python在特定操作中自动调用。

②作用

  • 简化代码
  • 增强对象行为
  • 提供方便的接口
  • 增强可读性和可维护性
  • 实现对象之间的灵活交互

魔术方法是 Python 中强大而灵活的功能,使得自定义类能够与语言中的基本特性和运算符无缝集成。它们不仅提升了代码的可读性和可维护性,还遵循了面向对象编程的原则,为开发人员提供了更多的设计自由。

二、常见的魔术方法

常见的魔术方法:
在这里插入图片描述

① __init__构造方法

class Student:name=None          # 记录学生姓名gender=None        # 记录学生性别age=None           # 记录学生年龄stu_1=Student()
stu_1.name="小明"
stu_1.gender="男"
stu_1.age="15"stu_2=Student()
stu_2.name="小红"
stu_2.gender="女"
stu_2.age="18"

在上面这段代码中,为对象的属性赋值需要依次进行,略显繁琐。

思考:那有没有更加高效的方式能够一行代码就完成呢?Student()这个括号能否像函数(方法)那样,通过传参的形式对属性赋值呢?
答:可以,需要使用__init__()方法。

定义:
在Python中,构造方法是一种特殊的方法,用于初始化对象的属性。构造方法的名称是 __init__()。它在创建对象时自动调用。通过构造方法,可以为新创建的对象设置初始状态或属性值。

作用:

  • 构建类对象的时候会自动运行
  • 构建类对象的传参会传递给构造方法,借此特性可以给成员变量赋值

注意事项:

  • 构造方法也是成员方法,不要忘记在参数列表中提供self关键字
  • 在构造方法内定义成员变量,需要使用self关键字
class Student:def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=telprint("Student类创建了一个类对象")stu=Student("小明","18","13426272890")
print(stu.name)
print(stu.age)
print(stu.tel)

输出结果:
Student类创建了一个类对象
小明
18
13426272890

【分析】
在这里插入图片描述
self.name = name这行代码的作用是将参数 name 的值赋给对象的 name 属性,确保每个 Student 对象都有自己的 name。

  • self 是对象的实例,指向当前创建的对象
  • self.name 是对象的属性(实例变量),用于存储学生的名字
  • name 是构造方法的参数,即在创建对象时传入的值

② __str__字符串方法

__str__字符串方法可返回对象的字符串表示,通常用于使用print()函数时。

class Student:# 构造方法def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=telstu=Student("小明","18","13456789021")
print(stu)
print(str(stu))

输出结果:
<main.Student object at 0x000001C3F0FEA030>
<main.Student object at 0x000001C3F0FEA030>

当类的对象被转换为字符串时,通常输出的是内存地址,这样的表示并没有太大意义。为了提供更有用的信息,我们可以通过定义 __str__字符串方法来控制对象在转换为字符串时的行为。

class Student:# 构造方法def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=tel# __str__魔术方法def __str__(self):return f"Student类对象,姓名:{self.name},年龄:{self.age},电话:{self.tel}"stu=Student("小明","18","13456789021")
print(stu)
print(str(stu))

输出结果:
Student类对象,姓名:小明,年龄:18,电话:13456789021
Student类对象,姓名:小明,年龄:18,电话:13456789021

③ __lt__比较方法

__lt__比较方法用于定义小于 (<) 运算符的行为,当你用 a < b 进行比较时,实际上会调用 a __lt__(b),返回一个布尔值 (True 或 False)。

class Student:# 构造方法def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=telstu1=Student("小明","18","13456789021")
stu2=Student("小红","17","13786789021")
print(stu1<stu2)

输出结果:
在这里插入图片描述
直接对两个对象进行比较是不可行的,但如果在类中实现 __lt__方法,就可以使用小于符号进行比较。同时,根据定义的逻辑,也可以实现大于符号的比较。

class Student:# 构造方法def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=tel# __lt__魔术方法def __lt__(self, other):return self.age<other.agestu1=Student("小明","18","13456789021")
stu2=Student("小红","17","13786789021")
print(stu1<stu2)
print(stu1>stu2)

输出结果:
False
True

【分析】
在这里插入图片描述
return self.age < other.age 这行代码执行实际的比较。 self 表示调用该方法的对象实例; other 表示与 self 进行比较的另一个对象实例。如果 self 对象的 age 小于 other对象的 age,那么返回 True;否则返回 False。

④ __le__比较方法

__le__比较方法用于定义小于或等于 (<=) 运算符的行为,你用 a <= b 进行比较时,会调用 a __le__(b),返回一个布尔值 (True 或 False)。

class Student:# 构造方法def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=tel# __le__魔术方法def __le__(self, other):return self.age<=other.agestu1=Student("小明","18","13456789021")
stu2=Student("小红","17","13786789021")
print(stu1<=stu2)
print(stu1>=stu2)

输出结果:
False
True

⑤ __eq__比较方法

__eq__比较方法用于定义相等 (==) 运算符的行为,当你用 a == b 进行比较时,会调用 a __eq__(b), 返回值为布尔值 (True 或 False)。

class Student:# 构造方法def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=telstu1=Student("小明","18","13456789021")
stu2=Student("小红","17","13786789021")
print(stu1==stu2)

输出结果:
False

在 Python 中,使用== 运算符比较对象时,默认情况下比较的是对象的内存地址,而不是其内容。所以== 运算符判断的是两个对象是否是同一个实例。因为 stu1 和 stu2 是两个不同的 Student 实例,它们在内存中占用不同的空间。因此,它们的内存地址不同,比较结果为 False。

实现 __eq__比较方法,我们可以根据对象的属性自定义相等性判断。

class Student:# 构造方法def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=tel# __eq__魔术方法def __eq__(self, other):return self.age <= other.agestu1=Student("小明","18","13456789021")
stu2=Student("小红","17","13786789021")
stu3=Student("小齐","17","13786745521")
print(stu1==stu2)
print(stu2==stu3)

输出结果:
False
True

【例题】
开学了有一批学生信息需要录入系统,请设计一个类,记录学生的姓名、年龄、电话这3类信息。要求通过for循环,配合input输入语句,并使用构造方法,完成学生信息的键盘录入。输入完成后,使用print语句,完成信息的输出。

class Student:# 构造方法def __init__(self,name,age,tel):self.name=nameself.age=ageself.tel=tel# 魔法方法,用于定义对象的字符串表示形式def __str__(self):return f"【学生姓名:{self.name},学生年龄:{self.age},学生电话:{self.tel}】"total_students=int(input("请输入需要录入的学生总数:"))
students=[]
# for循环,用于迭代一个由 range 生成的序列。
# range(total_students): range 函数生成一个从 0 到 total_students - 1 的整数序列
# 比如,如果 total_students 是 2,那么 range(2) 会生成 [0, 1]
for i in range(total_students):print(f"当前录入第{i+1}位学生信息,总共需录入{total_students}位学生信息")name=input("请输入学生姓名:")age=input("请输入学生年龄:")tel=input("请输入学生电话:")student=Student(name,age,tel)students.append(student)print(f"学生{i+1}信息录入完成,信息为{student}")print("所有学生信息录入完成,信息如下:")
for student in students:print(student)

输出结果示例:
在这里插入图片描述

http://www.dt0577.cn/news/47410.html

相关文章:

  • 武汉品牌网站建设公司哪家好百度搜索关键词数据
  • 上海网络平台网站建设上海专业网络推广公司
  • 玉溪做网站建设的公司互联网广告营销方案
  • 湘潭做网站电话磐石网络ios微信上的pdf乱码
  • 百度网盟 网站定向东莞网络推广平台
  • 网站表单提交到qq邮箱河南品牌网站建设
  • 公司网站的宣传栏怎么做seo技术培训机构
  • wordpress搭建问答系统网站更换服务器对seo的影响
  • wordpress全站301百度搜索优化建议
  • 网站做seo推广方案手游推广平台
  • 晚上睡不着偷偷看b站大全苏州seo安严博客
  • 2018什么语言做网站比较好江苏网站seo设计
  • 有经验的手机网站建设小说引流推广
  • 扬州 网站 建设seo优化操作
  • 网站制作免费正规推广平台有哪些
  • 网站怎么添加模块seo百度发包工具
  • 怎么可以做赌博的网站新的网络推广方式
  • 广州建网站比较有名的公司宣传软文是什么意思
  • 如何在虚拟机里面做网站百度资源站长平台
  • 个人风采网站制作南昌seo公司
  • 安康北京网站建设北京已感染上千万人
  • wordpress分类自定义文字厦门seo新站策划
  • 自己做的网站在浏览器上显示不安全网络营销策略包括哪几大策略
  • 丰都专业网站建设公司海外网站
  • 旅游网站建设ppt模板东莞关键词优化平台
  • 合肥做网站优化seo专员工作内容
  • 淄博外贸网站制作seod的中文意思
  • dw做网站视频教程韶关seo
  • 有没有医学生做课件的网站在线识别图片百度识图
  • 自适应网站建设价格怎么样把自己的产品网上推广