Python 从入门到实战21(面向对象简介)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们讨论了函数的相关知识。今天我们将学习一下面向对象的基础知识。

python 是面向对象的设计语言,面相对象object oriented 缩写字母OO,面向对象编程object oriented programming 缩写 OOP。面向对象编程(OOP)是一种程序设计思想,它利用"对象"来封装数据(属性)和操作那些数据的方法,并通过"继承"和"多态"来定义不同的类以及它们之间的关系。

在Python中,可以通过定义类(class)和实例化对象(object)来实现面向对象编程。

1、对象的理解

对象是一个抽象的概念,用于表示任意存在的事物。世间万物皆为对象。

通常将对象划分为两部分,即静态部分和动态部分。静态部分被称为:"属性",任何对象都具备自身属性,如人的性别。动态部分指对象的行为,即对象执行的动作,如人可以行走,鸟儿可以飞翔。

注意:在python中,一切都是对象,也就是说,不仅是具体的事物被称为对象,字符串、列表、字典等都被称作对象。

在Python实际应用中,对象是类的实例。类定义了对象的基本结构和行为,而对象则是具体的实体,拥有类所定义的属性和方法。

举例说明:

#类的练习

class Person: #类的名称一般第一个字母大写

def init(self,name,age):#构造方法

self.name = name

self.age = age

def greet(self):

print("hello,I am {:s} and I am {:d} years old.".format(self.name,self.age))

#通过.format()来输出对应的形式

xiaomi=Person("xiaomi",10) #创建对象的实例

xiaomi.greet() #通过实例调用greet 方法

输出结果:

2、类的理解

类是封装对象的属性和行为的载体。反过来说,具有相同属性和行为的一类实体被称为类。

类的定义‌:在Python中,使用class关键字来定义一个类。类体中可以包含类变量、方法、属性等。类变量在整个实例化的对象中是公用的,而实例变量则是在每个实例中独立的。

类的属性和方法‌:类可以包含属性和方法。属性用于存储数据,而方法用于执行操作。类变量在所有实例之间共享,而实例变量则每个实例都有自己的一份拷贝。

类的实例化‌:定义类之后,需要创建类的实例才能使用。创建实例的过程称为实例化。实例化时,可以使用类名和参数列表来创建对象。

如定义一个大雁类,即Geese,在该类中,可以定义每个对象共有的属性和方法;而一只要从北方飞往南方的大雁则是大雁类的一个对象,即wildGeese,对象是类的实例。

class Geese:

''' 大雁类的练习
'''
def init(self,claw,wing):#有属性像翅膀,爪子

self.claw = claw

self.wing = wing

def fly(self):

print("I LIKE FLY!")

claw1 = "爪子很有力,是圆形的"

wing1 = "翅膀很长"

southGeese = Geese(claw1, wing1) #创建大雁类的实例

southGeese.fly()

输出结果:

3、面向对象程序设计的特点

面向对象设计由3个主要的特征,即封装、继承、多态。

1)封装性

封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类。通过封装思想保证了类内部数据结构的完整性,使用该类的用户不能直接看到类中的数据结构,而只能执行类允许公开的数据。

封装是面向对象编程(OOP)的四大基本原则之一,旨在通过私有变量和私有方法的设置,实现隐藏对象的属性和实现细节,允许外部通过公共的访问方式与内部进行交互,同时限制直接访问对象的内部状态,以保护数据的安全性和完整性。

在Python中,封装主要通过以下几种方式实现:

  1. ‌私有变量‌:通过在变量名前添加双下划线(__),如__xxx,可以将变量设置为私有。这种方式在类内部可以使用,但在类外部无法直接访问。例如,self.__A是一个私有变量,只能在类内部使用。
  2. ‌私有方法‌:类似地,通过在方法名前添加双下划线(__),如__foo,可以将方法设置为私有。私有方法同样只能在类内部使用,外部无法直接调用。
  3. property属性‌:除了私有变量和私有方法外,Python还提供了property属性,这是一种特殊的属性,可以将一个方法变成属性调用,同时保留方法的灵活性。

封装的目的在于:

  • 保护隐私数据和方法,明确内外区分。
  • 隔离复杂的实现方法,使得对象的使用更加简单。
  • 提高代码的复用性。
  • 隔离变化和复杂性。
  • 提高安全性。

通过封装,我们可以控制属性的读和修改的访问级别,将抽象得到的数据和行为结合成一个有机的整体,即类。这样不仅增强了代码的可读性和可维护性,还确保了数据的一致性和完整性‌。

2)继承性

在Python中,类可以继承自一个或多个父类。子类会继承父类的所有公有(public)和保护(protected)属性与方法。在Python中,继承性可以通过关键字class和冒号:来声明。

举例说明:

#类的练习

class Person: #类的名称一般第一个字母大写

def init(self,name,age):#构造方法

self.name = name

self.age = age

def greet(self):

print("hello,I am {:s} and I am {:d} years old.".format(self.name,self.age))

#通过.format()来输出对应的形式

#继承的练习

class Child(Person): #继承Person 类

def goschool(self): #添加自己的行为函数

print("I am a child,I need to go to school!")

a_child = Child("xiaohua",7) #复用父类的属性

a_child.greet()#复用父类的方法

a_child.goschool()

在这个例子中,Child类继承了Parent类。Child类继承了Parent类的greet()方法,并且可以有它自己的goschool()方法。当我们创建Child类的实例并调用它的方法时,它能够调用自己的方法以及从Parent类继承的方法。

3)多态性

将父类对象应用于字类的特征就是多态。子类继承了父类特征的同时,也具备了自己的特征,并且实现不同的效果,这就是多态话的结构。像上面继承性的例子中,Child 类就有自己的行为特征:goshcool。

再举个简单例子:

class Animal:

def speak(self):

raise NotImplementedError("子类必须实现该方法")

class Dog(Animal):

def speak(self):

return "汪汪汪啊"

class Cat(Animal):

def speak(self):

return "喵喵喵啊"

def animal_speaks(animal):

"""接受所有Animal类的子类实例,并调用它们的speak方法"""

print(animal.speak())

# 使用

dog = Dog()

cat = Cat()

animal_speaks(dog) # 输出: 汪汪汪啊

animal_speaks(cat) # 输出: 喵喵喵啊

输出的结果:

这个例子展示了如何在Python中使用多态性。Animal 类定义了一个必须由子类实现的 speak 方法。Dog 和 Cat 类继承了 Animal 类并实现了 speak 方法。animal_speaks 函数接受任何 Animal 类的子类实例,并调用它们的 speak 方法。这样,无论传递什么子类实例,animal_speaks 函数都能正确地调用 speak 方法。

今天先写学习到这里了,每天进步一点点。今天也要加油啊!

相关推荐
数据智能老司机4 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机5 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机5 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机5 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i5 小时前
drf初步梳理
python·django
每日AI新事件5 小时前
python的异步函数
python
这里有鱼汤6 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook15 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室16 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三17 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试