news 2026/7/25 20:19:32

类和对象1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
类和对象1

初识对象

  1. 设计类(设计一个登记表)
classStudent:name=None#记录学生姓名gender=None#记录学生性别nationality=None#记录学生国籍native_place=None#记录学生籍贯age=None#记录学生年龄

2.创建对象(打印一个登记表)

stu_1=Student()# stu_1=Student()即使对象也是变量

3.对象属性进行赋值(填写表单)

stu_1.name="林新"stu_1.gender="男"stu_1.nationality="中国"stu_1.native_place="江苏省"stu_1.age=18

4.获取对象中记录的信息

print(stu_1.name)print(stu_1.gender)print(stu_1.nationality)print(stu_1.native_place)print(stu_1.age)

类中成员方法的定义和使用

class 类名称:class是关键字,表示要定义类

  • 类的属性(记录数据),定义在类中的变量(成员变量
  • 类的行为(定义函数用来记录方法),定义在类中的函数(成员方法
    函数:写在类外面的;写在类内部的函数叫方法
    创建类对象的语法:对象=类名称()

成员方法的定义语法:和定义函数基本一致,多了个self关键字,self表示类对象自身,在传参的时候可以当作不存在;当我们使用类对象调用方法,self会自动被python传入。

  • 在方法内部,想要访问类的成员变量,必须使用self: self.name
def 方法名(self,形参1,.......,形参n): 方法体 class 类名称: 成员变量 def 成员方法(self,参数列表): 成员方法体 对象=类名称()

总结:

定义一个带有成员方法的类

classStudent:name=None# 学生姓名defsay_hi(self):print(f"大家好呀,我是{self.name},欢迎大家多多关照")# 想要访问成员属性,必须使用self这个关键字defsay_hi2(self,msg):print(f"大家好呀,我是{self.name},{msg}")stu=Student()stu.name="左航"stu.say_hi()stu2=Student()stu2.name="邓佳"stu2.say_hi2("你们好啊")

面向对象的编程思路

基于模板(类)去创建实体(对象),使用对象完成功能开发
1.封装
2.继承
3.多态
基于类创建对象的语法:为什么非要创建对象才能使用呢?

  • 答:类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作
    这种套路,称之为:面向对象编程

面向对象编程:设计类,基于类创建对象,由对象做具体的工作
设计一个闹钟类:

classClock:id=None#序列化price=None#价格defring(self):importwinsound winsound.Beep(500,500)# (频率,时间)# 构建两个闹钟对象让其工作clock1=Clock()#基于类创建对象clock1.id="003203"# 使用对象的属性和行为clock1.price=9.99print(f"闹钟ID:{clock1.id},价格:{clock1.price}")clock1.ring()# 调用ring这个方法clock2=Clock()clock2.id="001122"clock2.price=19.88print(f"闹钟ID:{clock2.id},价格:{clock2.price}")clock1.ring()# 调用ring这个方法

类的构造方法

用构造方法对成员变量进行赋值

classStudent:# 这一段可以省略name=Noneage=Nonetel=Nonedef__init__(self,name,age,tel):# 会自动声明上面的变量,既可以定义也可以赋值self.name=name self.age=age self.tel=telprint("student类创建了一个类对象")stu=Student("zhou",31,"123456")# 这句话一执行,上面那个def的构造方法就跑了起来,# zhou给了name,31给了age,123456给了tel。外部传入的参数给了内部的成员变量,内部的成员变量print(stu.name)print(stu.age)print(stu.tel)

总结:

习题案例:

foriinrange(1,10):print(f"当前录入第{i}位学生的信息,总共需录入10位学生信息")name=input("请输入学生的姓名:")age=input("请输入学生的年龄:")address=input("请输入学生的地址:")i=i+1classStudent:def__init__(self,name,age,tel):self.name=name self.age=age self.tel=tel stu=Student(f"{name}",{age},{address})print(f"学生{i}信息录入完成,信息为:【学生姓名:{name},年龄:{age},地址:{address}】")

常用的类内置方法

python内置的各类魔术方法:前后两个__str__

classStudent:def__init__(self,name,age):self.name=name self.age=age# __str__魔术方法:打印类对象默认是它的地址,用这个方法,可以改变默认输出为你想要的def__str__(self):returnf"Student类对象,name:{self.name},age:{self.age}"# __lt__魔术方法:在两个类对象之间进行比较小于或者大于,返回True或Falsedef__lt__(self,other):returnself.age<other.age# self当前对象,other被比较对象# __le__魔术方法:小于等于或者大于等于def__le__(self,other):returnself.age<=other.age# __eq__魔术方法:相等比较,不用该方法的话,类对象中比较的是两个地址def__eq__(self,other):returnself.age==other.age stu1=Student("zhou",35)stu2=Student("lin",35)print(f"根据后面的比较符输出结果stu1 <= stu2{stu1<=stu2},这是le的比较")print(stu1>stu2)#Falseprint(stu1==stu2)#True

封装

  • 私有成员的设置:私有成员变量(变量名以__开头)、私有成员行为(变量名以__开头)
  • 私有成员(属性和成员方法)无法被类对象直接使用,但可以被类中其他的成员使用
  • 私有成员的意义在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用),私有的只可以让我们内部自己使用


    总结:
# 定义一个类:内含私有成员变量和私有成员方法classPhone:__current_voltage=0.5# 等于1的时候:5G通话已开启5G通话已开启;等于0.5的时候:让CPU以单核形式运行;电量不足,无法使用5G...def__keep_single_core(self):print("让CPU以单核形式运行")defcall_by_5g(self):#定义了call_by_5G的一个成员方法,在这个公开的方法里面,它可以调用我们不公开的私有成员变量和私有成员方法ifself.__current_voltage>=1:print("5G通话已开启")else:self.__keep_single_core()# 调用上面的私有成员print("电量不足,无法使用5G通话,并已设置为单核运行进行省电")# 调用类对象phone,来调用phone类中的其他成员的call_by_5g这个方法phone=Phone()phone.call_by_5g()# phone.__keep_single_core() 这两个私有成员变量和私有成员方法无法被直接类对象phone使用# print(phone.__current_voltage)

封装练习题:

classIphone:__is_5g__enable=Truedef__check_5g(self):ifself.__is_5g__enable:print("5g开启")else:print("5g关闭,使用4g网络")defcall_by_5g(self):self.__check_5g()print("正在通话中")iphone=Iphone()iphone.call_by_5g()# 通过调用公有成员来调用私有成员属性和私有成员方法# 私有成员的意义:通过它可以调用不直接对用户开放的属性和行为
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/25 20:16:38

智能体技术演进与核心架构解析

1. 智能体技术发展脉络 2006年斯坦福大学首次提出"软件智能体"概念时&#xff0c;可能没想到这个概念会在20年后引发全球科技竞赛。智能体技术经历了三个关键发展阶段&#xff1a; 第一阶段&#xff08;2006-2015&#xff09;的规则型智能体&#xff0c;就像严格按照…

作者头像 李华
网站建设 2026/7/25 20:14:11

2025广州AI+案例集:技术实现与行业应用解析

1. 案例集背景与价值解读这份《2025年广州市"人工智能"典型案例集》的发布&#xff0c;标志着粤港澳大湾区人工智能应用进入规模化落地阶段。作为国内首个以城市为单位系统梳理AI应用场景的官方文件&#xff0c;其特殊价值在于收录的案例全部经过真实场景验证&#x…

作者头像 李华
网站建设 2026/7/25 20:13:28

UE5 AI控制SKM_Manny角色:解决动画与行为树冲突的完整方案

1. 项目概述&#xff1a;当AI Controller遇上SKM_Manny最近在尝试用UE5的AI Controller来控制Epic官方提供的SKM_Manny角色时&#xff0c;我遇到了不少预料之外的问题。这听起来像是一个标准的“AB”组合&#xff0c;毕竟AI Controller是UE里控制NPC行为逻辑的核心组件&#xf…

作者头像 李华
网站建设 2026/7/25 20:13:18

AI短视频全自动生成:从文案到发布的完整工作流

1. 项目背景与核心价值 去年开始接触短视频创作的朋友应该都深有体会——日更压力实在太大了。每天要构思选题、撰写文案、录制配音、剪辑视频&#xff0c;一套流程下来至少3小时。我见过太多创作者因为内容产出效率跟不上&#xff0c;最终无奈停更。 直到上个月测试Coze平台时…

作者头像 李华
网站建设 2026/7/25 20:09:00

利用Taotoken聚合能力为内部知识库问答系统提供稳定AI后端

利用Taotoken聚合能力为内部知识库问答系统提供稳定AI后端 当企业计划构建一个基于内部文档的智能问答系统时&#xff0c;对AI服务的稳定性与响应速度的要求往往成为技术选型的核心考量。直接对接单一模型服务商&#xff0c;可能会面临服务波动、配额耗尽或模型更新带来的中断…

作者头像 李华