物流网站开发,怎么样给公司做网站,在家做兼职官方网站平台,wordpress 外贸 模板Python 面向对象编程详解 文章目录Python 面向对象编程详解前言一、面向对象的基本概念1.1 类#xff08;Class#xff09;1.2 对象#xff08;Object#xff09;1.3 属性#xff08;Attribute#xff09;1.4 方法#xff08;Method#xff09;二、类的定…Python 面向对象编程详解 文章目录Python 面向对象编程详解前言一、面向对象的基本概念1.1 类Class1.2 对象Object1.3 属性Attribute1.4 方法Method二、类的定义与对象的创建2.1 类的定义2.2 对象的创建三、构造方法与属性初始化3.1 构造方法的语法3.2 构造方法的使用举例3.3 带有默认参数的构造方法四、类的属性和方法分类4.1 属性分类4.2 方法分类五、继承5.1 单继承5.2 多继承六、封装与访问控制七、多态总结前言
面向对象编程Object-Oriented Programming简称 OOP是一种重要的编程范式它将数据和操作数据的方法封装在一起以对象为核心来组织代码。Python 作为一门支持面向对象编程的语言提供了简洁而强大的面向对象特性让开发者能够更高效地构建复杂应用。 一、面向对象的基本概念
1.1 类Class
类是对具有相同属性和方法的一类事物的抽象描述它定义了该类对象所共有的属性和方法。可以把类看作是一个模板通过这个模板可以创建出具体的对象。类不仅包含了数据属性还包含了操作这些数据的函数方法这使得数据和操作能够紧密结合。 例如“汽车” 可以看作一个类它具有颜色、品牌、型号、发动机排量等属性还有行驶、刹车、转弯、加速等方法。这些属性和方法是所有汽车都具备的共性特征只是不同汽车的属性值和方法的具体表现可能不同。 1.2 对象Object
对象是类的实例化结果是具体存在的事物。一个类可以创建出多个对象每个对象都具有该类所定义的属性和方法但属性的值可能不同。对象是类的具体体现通过对象可以实现类所定义的功能。 例如根据 “汽车” 类可以创建出 “一辆红色的特斯拉 Model 3发动机排量为 2.0T”“一辆黑色的宝马 X5发动机排量为 3.0T” 等具体的汽车对象。这些对象都属于 “汽车” 类但各自的属性值不同执行方法时的表现也可能有所差异。 1.3 属性Attribute
属性是类或对象所具有的特征用于描述对象的状态。在类中定义的属性是该类所有对象共有的特征每个对象可以有不同的属性值。属性可以分为不同的类型如基本数据类型整数、字符串、布尔值等、复合数据类型列表、字典、元组等甚至可以是其他对象。 例如“汽车” 类的 “颜色” 属性可以是字符串类型如 “红色”“黑色”“发动机排量” 属性可以是浮点数类型如 2.0、3.0。 1.4 方法Method
方法是类中定义的函数用于描述对象的行为即对象可以执行的操作。方法可以操作类或对象的属性实现特定的功能。与普通函数不同方法需要通过类或对象来调用并且方法中通常包含一个特殊的参数如self、cls用于引用类或对象本身。 例如“汽车” 类的 “行驶” 方法可以改变汽车的位置属性“加速” 方法可以提高汽车的速度属性。 类与对象关系示意图 二、类的定义与对象的创建
2.1 类的定义
在 Python 中使用class关键字来定义类基本语法如下
class 类名:# 类的属性定义类属性1 值1类属性2 值2# ...# 类的方法定义def 方法名1(self, 参数1, 参数2, ...):# 方法体passdef 方法名2(self, 参数1, 参数2, ...):# 方法体pass# ...其中类名通常采用驼峰命名法每个单词的首字母大写不使用下划线这是 Python 中类命名的惯例便于区分类和函数。类属性是该类所有对象共有的属性定义在方法之外方法定义在类内部第一个参数通常是self用于引用实例对象。
2.2 对象的创建
创建对象的过程称为实例化只需使用类名加括号即可。在实例化时可以根据类的构造方法如果有的话传递参数用于初始化对象的属性。
举例
# 定义汽车类
class Car:# 类的属性category 交通工具 # 所有汽车都属于交通工具类别color 白色 # 默认颜色为白色brand 未知品牌model 未知型号# 类的方法def drive(self):描述汽车行驶的行为print(f{self.brand}{self.model}正在道路上行驶)def brake(self):描述汽车刹车的行为print(f{self.brand}{self.model}正在刹车车速逐渐降低)def accelerate(self, speed_increase):描述汽车加速的行为参数为增加的速度print(f{self.brand}{self.model}加速速度增加了{speed_increase}km/h)# 创建汽车对象
car1 Car()
car2 Car()# 访问对象的属性
print(fcar1的颜色{car1.color}) # 输出car1的颜色白色
print(fcar2的品牌{car2.brand}) # 输出car2的品牌未知品牌
print(fcar1的类别{car1.category}) # 输出car1的类别交通工具# 修改对象的属性值
car1.color 红色
car1.brand 特斯拉
car1.model Model 3
car2.color 黑色
car2.brand 宝马
car2.model X5print(f修改后car1的颜色{car1.color}) # 输出修改后car1的颜色红色
print(f修改后car2的品牌{car2.brand}) # 输出修改后car2的品牌宝马# 调用对象的方法
car1.drive() # 输出特斯拉Model 3正在道路上行驶
car2.brake() # 输出宝马X5正在刹车车速逐渐降低
car1.accelerate(20) # 输出特斯拉Model 3加速速度增加了20km/h三、构造方法与属性初始化
为了在创建对象时能够为对象的属性赋初始值避免创建对象后再逐个修改属性的繁琐操作Python 提供了构造方法__init__。构造方法是一种特殊的方法在对象被创建时自动调用用于初始化对象的属性。
3.1 构造方法的语法
class 类名:def __init__(self, 参数1, 参数2, ..., 参数n):# 初始化实例属性self.属性1 参数1self.属性2 参数2# ...self.属性n 参数n# 其他方法定义其中self代表类的实例对象在调用方法时不需要手动传递Python 会自动将当前对象作为self参数传递给方法。参数 1 到参数 n 是用于初始化对象属性的值在创建对象时需要传递这些参数。
3.2 构造方法的使用举例
class Car:# 类属性category 交通工具def __init__(self, color, brand, model, displacement):构造方法初始化汽车的颜色、品牌、型号和发动机排量属性self.color colorself.brand brandself.model modelself.displacement displacement # 发动机排量def drive(self):print(f{self.color}的{self.brand}{self.model}排量{self.displacement}T正在行驶)def get_info(self):获取汽车的详细信息return f汽车信息颜色-{self.color}品牌-{self.brand}型号-{self.model}排量-{self.displacement}T# 创建对象时传递参数初始化属性
car1 Car(红色, 特斯拉, Model 3, 2.0)
car2 Car(黑色, 宝马, X5, 3.0)car1.drive() # 输出红色的特斯拉Model 3排量2.0T正在行驶
print(car2.get_info()) # 输出汽车信息颜色-黑色品牌-宝马型号-X5排量-3.0T在上面的例子中创建car1和car2对象时通过构造方法直接为color、brand、model和displacement属性赋值相比创建对象后再修改属性更加高效。
3.3 带有默认参数的构造方法
在构造方法中可以为参数设置默认值这样在创建对象时如果不需要修改该参数的值就可以不传递该参数。
class Car:category 交通工具def __init__(self, color白色, brand未知品牌, model未知型号, displacement1.5):self.color colorself.brand brandself.model modelself.displacement displacementdef get_info(self):return f汽车信息颜色-{self.color}品牌-{self.brand}型号-{self.model}排量-{self.displacement}T# 创建对象时不传递所有参数使用默认值
car3 Car()
print(car3.get_info()) # 输出汽车信息颜色-白色品牌-未知品牌型号-未知型号排量-1.5T# 创建对象时传递部分参数
car4 Car(蓝色, 丰田)
print(car4.get_info()) # 输出汽车信息颜色-蓝色品牌-丰田型号-未知型号排量-1.5T四、类的属性和方法分类
4.1 属性分类
属性类型定义位置访问方式特点举例实例属性__init__方法中或对象中对象、属性名每个对象的属性值可以不同属于对象私有self.color color类属性类中__init__方法外类名、属性名 或 对象、属性名所有对象共享该属性值属于类共有class Car: wheels 4所有汽车都有 4 个轮子
举例
class Car:wheels 4 # 类属性所有汽车都有4个轮子def __init__(self, color, brand):self.color color # 实例属性self.brand brand # 实例属性
car1 Car(红色, 特斯拉)
car2 Car(黑色, 宝马)
print(Car.wheels) # 输出4
print(car1.wheels) # 输出4
print(car2.color) # 输出黑色
print(car1.brand) # 输出特斯拉4.2 方法分类
方法类型定义方式调用方式特点举例实例方法def 方法名(self, 参数…):对象、方法名 ()依赖于对象能访问实例属性和类属性前面例子中的drive()、brake()类方法classmethoddef 方法名(cls, 参数…):类名、方法名 () 或 对象、方法名 ()依赖于类能访问类属性不能直接访问实例属性用于操作类属性的方法静态方法staticmethoddef 方法名(参数…):类名、方法名 () 或 对象、方法名 ()不依赖于类和对象不能直接访问类属性和实例属性与类相关的工具函数
举例
class Car:wheels 4 # 类属性def __init__(self, brand):self.brand brand # 实例属性# 实例方法def get_brand(self):return self.brand# 类方法classmethoddef change_wheels(cls, num):cls.wheels num# 静态方法staticmethoddef is_car(vehicle):return isinstance(vehicle, Car)car1 Car(特斯拉)# 调用实例方法
print(car1.get_brand()) # 输出特斯拉# 调用类方法
Car.change_wheels(6)
print(Car.wheels) # 输出6# 调用静态方法
print(Car.is_car(car1)) # 输出True
print(Car.is_car(不是汽车)) # 输出False五、继承
继承是面向对象编程的重要特性它允许一个类子类继承另一个类父类的属性和方法从而实现代码的复用。子类可以在父类的基础上添加新的属性和方法或重写父类的方法。
5.1 单继承
子类只继承一个父类。
语法
class 子类名(父类名):# 子类的属性和方法pass举例
class Vehicle:def __init__(self, color):self.color colordef move(self):print(f{self.color}的交通工具在移动)
# 子类汽车继承自交通工具
class Car(Vehicle):def __init__(self, color, brand):# 调用父类的构造方法super().__init__(color)self.brand brand# 重写父类的move方法def move(self):print(f{self.color}的{self.brand}汽车在公路上行驶)
car Car(红色, 特斯拉)
car.move() # 输出红色的特斯拉汽车在公路上行驶5.2 多继承
子类可以继承多个父类。
语法
class 子类名(父类名1, 父类名2, ...):# 子类的属性和方法pass举例
class Flyable:def fly(self):print(可以飞行)
class Swimmable:def swim(self):print(可以游泳)
# 子类水陆空三栖车继承自Flyable和Swimmable
class AmphibiousCar(Flyable, Swimmable):pass
car AmphibiousCar()
car.fly() # 输出可以飞行
car.swim() # 输出可以游泳 继承关系示意图 六、封装与访问控制
封装是指将对象的属性和方法隐藏起来只提供有限的接口供外部访问从而保证数据的安全性。在 Python 中通过命名约定来实现访问控制。
公有属性和方法默认情况下属性和方法都是公有的可以通过对象直接访问。私有属性和方法在属性或方法名前加上两个下划线__私有属性和方法只能在类的内部访问外部不能直接访问。
举例
class Person:def __init__(self, name, age):self.name name # 公有属性self.__age age # 私有属性def get_age(self): # 公有方法用于获取私有属性return self.__agedef __secret(self): # 私有方法print(这是一个秘密)
person Person(张三, 25)
print(person.name) # 输出张三
print(person.get_age()) # 输出25
# print(person.__age) # 报错不能直接访问私有属性
# person.__secret() # 报错不能直接调用私有方法七、多态
多态是指不同的对象对同一方法调用做出不同的响应。在继承的基础上子类重写父类的方法当调用该方法时会根据对象的实际类型执行相应的方法。
举例
class Animal:def make_sound(self):passclass Dog(Animal):def make_sound(self):print(汪汪汪)class Cat(Animal):def make_sound(self):print(喵喵喵)def animal_sound(animal):animal.make_sound()dog Dog()
cat Cat()animal_sound(dog) # 输出汪汪汪
animal_sound(cat) # 输出喵喵喵在上面的例子中Dog和Cat都继承自Animal并重写了make_sound方法。当调用animal_sound函数时传入不同的动物对象会执行不同的make_sound方法体现了多态的特性。 总结
Python 面向对象编程通过类、对象、继承、封装和多态等特性提供了一种灵活、高效的代码组织方式。类是对象的模板对象是类的实例继承实现了代码复用封装保证了数据安全多态提高了代码的灵活性。掌握面向对象编程思想能够帮助我们设计出更清晰、更易于维护和扩展的程序尤其在开发大型项目时优势更为明显。通过不断实践我们可以更好地理解和运用这些特性编写出高质量的 Python 代码。