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

Python的面向对象

一、面向对象基本语法

摘要:本文系统介绍了 Python 面向对象编程的基本语法,涵盖类与对象的概念、属性(实例属性与类属性)、方法(实例方法、类方法与静态方法)、访问控制(封装)以及常用的特殊方法(如__init____str__等)。通过丰富的代码示例,帮助读者快速掌握面向对象的核心要素,为后续深入学习打下坚实基础。

1.1 什么是面向对象

面向对象是一种编程思想,把现实世界的事物抽象成对象,对象有属性(特征)和方法(行为)。

概念解释现实例子
类(Class)对象的蓝图/模板汽车设计图
对象(Object)根据类创建的实例具体的某辆汽车
属性(Attribute)对象的特征颜色、品牌、价格
方法(Method)对象的行为启动、刹车、加速
1.2 类的基本语法
  • 定义一个类
classDog:"""这是一个狗类"""pass# 占位符,暂时什么都不做# 对象实例化car1=Car()car2=Car()print(f"car1 ={car1};\n car2 ={car2};\n type(car1) ={type(car1)};\n type(car2) ={type(car2)}")# 输出结果:# car1 = <__main__.Car object at 0x000001DBE3B363C0>;# car2 = <__main__.Car object at 0x000001DBE3BC1310>;# type(car1) = <class '__main__.Car'>;# type(car2) = <class '__main__.Car'>
1.3 属性
  • 实例属性(属于具体对象的)
classCar:passcar=Car()car.name='奔驰'car.color='black'print(f"car.name ={car.name}, car.color ={car.color}")# 输出结果:car.name = 奔驰, car.color = black
  • 使用__init()__初始化属性(推荐)
classCar:def__init__(self,name,color,money):self.name=name self.color=color self.money=money car=Car('奔驰','黑色','20万')# self 自动指向carprint(f"car.name ={car.name}, car.color ={car.color}, car.money ={car.money}")# 输出结果: car.name = 奔驰, car.color = 黑色, car.money = 20万

self的含义:

  • self代表的是当前实例对象本身
  • 调用时不用手动传参,Python自动传递
1.4 方法
  • 实例方法(最常用)
classCar:def__init__(self,name,color,money):self.name=name self.color=color self.money=moneydefspeed(self):''' 实例方法: 汽车加速 :return: '''print("汽车加速")defget_info(self):returnf"名称:{self.name}, 颜色:{self.color}, 价格:{self.money}"car=Car('奔驰','黑色','20万')car.speed()# 输出结果:汽车加速car_info=car.get_info()print(f"当前汽车的详细信息为:{car_info}")# 输出结果:当前汽车的详细信息为:名称:奔驰, 颜色:黑色, 价格:20万
  • 带参数的方法
classCar:def__init__(self,name,color,money):self.name=name self.color=color self.money=moneydefrun(self,distance):''' 实例方法: 汽车跑了多少米 :return: 一个结果字符串 '''returnf"汽车跑了了{distance}米"car=Car('奔驰','黑色','20万')# 关键字传参car_distance=car.run(distance=100)print(car_distance)# 汽车跑了了100米
1.5 类属性和类方法
  • 类属性(所有对象共享)
classCar:# 类属性type_name="汽车"def__init__(self,brand,model):# 实例属性self.brand=brand self.model=model# 通过类访问类属性print(Car.type_name)# 输出结果:汽车# 通过实例也可以读取类属性my_car=Car("吉利","星越")print(my_car.type_name)# 输出结果:汽车# 修改类属性,所有的对象都改变my_car.type_name="小汽车"print(my_car.type_name)# 输出结果:小汽车
  • 类方法(使用 @classmethod)
classCar:type_name="汽车"total_cars=0def__init__(self,name,color,money):self.name=name self.color=color self.money=money Car.total_cars+=1@classmethoddefget_total(cls):"""类方法:获取创建的车的总数"""returnf"总共有{cls.total_cars}辆车"@classmethoddefchange_type_name(cls,new_type_name):"""类方法:修改类属性"""cls.type_name=new_type_name car1=Car("宝马","黑色","21万")car2=Car("宝马","白色","25万")print(Car.get_total())# 总共有2辆车Car.change_type_name("越野车")print(Car.type_name)# 越野车
  • 静态方法(使用@staticmethod
classMathUtils:@staticmethoddefadd(a,b):"""静态方法:不需要 self 或者 cls"""returna+bprint(MathUtils.add(1,2))# 3
1.6 访问控制(封装)

Python通过命名约定来控制访问权限

classPerson:def__init__(self,name,age):self.name=name# 公共属性(可以直接访问)self._age=age# 受保护的(建议不要直接访问)self.__money=10# 私有属性(名称修饰,不能直接访问)defget_money(self):"""通过方法来访问私有属性"""returnself.__moneydefset_money(self,money):"""通过方法修改私有属性(可以添加验证)"""if(money>0):self.__money=moneyelse:self.__money=0p=Person("张三",25)print(p.name)# 可以直接访问print(p._age)# 可以直接访问,但是不建议# print(p.__money) # 出现报错 AttributeErrorprint(p.get_money())# 10 通过方法进行访问p.set_money(100)# 修改私有方法print(p.get_money())# 100

总结:

命名方式访问级别示例
name公共(可访问)self.name
_name受保护的(约定,不建议访问)self._age
__name私有(不能直接访问)self.__money
1.7 常用的特殊方法
classDog:def__init__(self,name,age):self.name=name self.age=agedef__str__(self):"""字符串表示(print时调用)"""returnf"狗:{self.name},{self.age}岁"def__repr__(self):"""交互式环境显示"""returnf"Dog('{self.name}',{self.age})"def__len__(self):"""返回长度(len()时调用)"""returnself.agedef__add__(self,other):"""加法运算(+)"""returnDog(self.name+other.name,self.age+other.age)dog=Dog("旺财",3)print(dog)# 狗: 旺财, 3岁(调用 __str__)print(len(dog))# 3(调用 __len__)dog2=Dog("小黑",2)dog3=dog+dog2# 调用 __add__print(dog3.name)# 旺财小黑
http://www.jsqmd.com/news/1302422/

相关文章:

  • 戴森球计划工厂蓝图终极指南:从零开始构建你的星际帝国
  • Mermaid Live Editor终极指南:3分钟学会用代码创建专业流程图
  • Flutter Picker完全指南:打造高效选择器的终极解决方案
  • 20260731
  • 珠海人工智能应用工程师报名机构哪家好?推荐中山优才教育 - 人工智能报名机构推荐
  • 如何使用Flock-You构建实时GPS标记的监控设备探测系统
  • 佳能TS3380,TS3350,TS5320,TR7540,E568,E518,IP2780,TS6220,TS5180支持代码5B00,5B02,1700,1702,P07,E08,1704亲测完美
  • APKMirror:安卓应用下载的终极开源客户端,告别地区限制与版本困扰
  • AI系统架构评审实战手册:7步完成高并发场景下的代码健壮性压测与重构
  • 振弦式传感器自动化测量控制板 现场可调试、可级联扩展 多通道扩展
  • 从零开始玩转UNICOM:5分钟上手图像检索与特征提取
  • 2026长沙连锁黄金回收店地址,足金金条均可回收 - 奢侈品回收实体店
  • 闲置金饰无需长期收纳存放 杭州周大福老凤祥便捷回收体验 - 日常比对手册
  • 解码字节跳动7·30整合:一场关乎未来十年数字化主导权的布局
  • 5个简单步骤,让老旧电视流畅播放高清直播:mytv-android终极指南
  • 5. TCAM学习笔记
  • 如何使用Nerdbank.Streams实现进程内通信:FullDuplexStream完全解析
  • 常州本地黄金回收实测|收的顶黄金奢侈品回收,闲置黄金变现省心靠谱 - 一日一测评
  • 河南周边有封闭式正规文武学校吗?2026 武校盘点,附带校区地址、报名方式,支持就近到校参观【招生热线】 - 全国文武学校招生
  • AI 编程工具火了,为什么我的简历还是石沉大海?
  • 5分钟搞定B站视频下载:跨平台神器BilibiliDown完全指南
  • 紧急预警:2024Q3起,未接入动态定价AI的中型餐厅将面临17.2%毛利挤压(附ROI测算工具包)
  • 如何在5分钟内为Unity游戏开启自动翻译:XUnity.AutoTranslator完整使用指南
  • 如何使用PyGraft配置文件:10个关键参数优化知识图谱生成
  • OpenWork扩展与OpenCode集成:构建强大的自定义工作流
  • 北京博亚信诚科技值得推荐吗 - 17328623207
  • 记录一下 Python 连接达梦数据库的整个流程,附 CRUD 示例
  • 系统集成项目管理工程师培训课程适合哪些人? - 众智商学院官方
  • 专业开源Flash反编译工具JPEXS FFDec:5个高效技巧助你完美迁移数字资产
  • Codex 接入真实项目后,我为什么反而更担心“权限与日志”了?