一、面向对象基本语法摘要本文系统介绍了 Python 面向对象编程的基本语法涵盖类与对象的概念、属性实例属性与类属性、方法实例方法、类方法与静态方法、访问控制封装以及常用的特殊方法如__init__、__str__等。通过丰富的代码示例帮助读者快速掌握面向对象的核心要素为后续深入学习打下坚实基础。1.1 什么是面向对象面向对象是一种编程思想把现实世界的事物抽象成对象对象有属性特征和方法行为。概念解释现实例子类Class对象的蓝图/模板汽车设计图对象Object根据类创建的实例具体的某辆汽车属性Attribute对象的特征颜色、品牌、价格方法Method对象的行为启动、刹车、加速1.2 类的基本语法定义一个类classDog:这是一个狗类pass# 占位符暂时什么都不做# 对象实例化car1Car()car2Car()print(fcar1 {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__.Car1.3 属性实例属性属于具体对象的classCar:passcarCar()car.name奔驰car.colorblackprint(fcar.name {car.name}, car.color {car.color})# 输出结果car.name 奔驰, car.color black使用__init()__初始化属性推荐classCar:def__init__(self,name,color,money):self.namename self.colorcolor self.moneymoney carCar(奔驰,黑色,20万)# self 自动指向carprint(fcar.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.namename self.colorcolor self.moneymoneydefspeed(self): 实例方法 汽车加速 :return: print(汽车加速)defget_info(self):returnf名称:{self.name}, 颜色:{self.color}, 价格:{self.money}carCar(奔驰,黑色,20万)car.speed()# 输出结果:汽车加速car_infocar.get_info()print(f当前汽车的详细信息为:{car_info})# 输出结果:当前汽车的详细信息为:名称:奔驰, 颜色:黑色, 价格:20万带参数的方法classCar:def__init__(self,name,color,money):self.namename self.colorcolor self.moneymoneydefrun(self,distance): 实例方法 汽车跑了多少米 :return: 一个结果字符串 returnf汽车跑了了{distance}米carCar(奔驰,黑色,20万)# 关键字传参car_distancecar.run(distance100)print(car_distance)# 汽车跑了了100米1.5 类属性和类方法类属性所有对象共享classCar:# 类属性type_name汽车def__init__(self,brand,model):# 实例属性self.brandbrand self.modelmodel# 通过类访问类属性print(Car.type_name)# 输出结果:汽车# 通过实例也可以读取类属性my_carCar(吉利,星越)print(my_car.type_name)# 输出结果:汽车# 修改类属性所有的对象都改变my_car.type_name小汽车print(my_car.type_name)# 输出结果:小汽车类方法使用 classmethodclassCar:type_name汽车total_cars0def__init__(self,name,color,money):self.namename self.colorcolor self.moneymoney Car.total_cars1classmethoddefget_total(cls):类方法:获取创建的车的总数returnf总共有{cls.total_cars}辆车classmethoddefchange_type_name(cls,new_type_name):类方法:修改类属性cls.type_namenew_type_name car1Car(宝马,黑色,21万)car2Car(宝马,白色,25万)print(Car.get_total())# 总共有2辆车Car.change_type_name(越野车)print(Car.type_name)# 越野车静态方法使用staticmethodclassMathUtils:staticmethoddefadd(a,b):静态方法不需要 self 或者 clsreturnabprint(MathUtils.add(1,2))# 31.6 访问控制封装Python通过命名约定来控制访问权限classPerson:def__init__(self,name,age):self.namename# 公共属性可以直接访问self._ageage# 受保护的建议不要直接访问self.__money10# 私有属性名称修饰不能直接访问defget_money(self):通过方法来访问私有属性returnself.__moneydefset_money(self,money):通过方法修改私有属性可以添加验证if(money0):self.__moneymoneyelse:self.__money0pPerson(张三,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.__money1.7 常用的特殊方法classDog:def__init__(self,name,age):self.namename self.ageagedef__str__(self):字符串表示print时调用returnf狗:{self.name},{self.age}岁def__repr__(self):交互式环境显示returnfDog({self.name},{self.age})def__len__(self):返回长度len()时调用returnself.agedef__add__(self,other):加法运算returnDog(self.nameother.name,self.ageother.age)dogDog(旺财,3)print(dog)# 狗: 旺财, 3岁调用 __str__print(len(dog))# 3调用 __len__dog2Dog(小黑,2)dog3dogdog2# 调用 __add__print(dog3.name)# 旺财小黑