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 方法。

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

相关推荐
waterHBO1 小时前
python 爬虫 selenium 笔记
爬虫·python·selenium
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py3 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy3 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
AIAdvocate4 小时前
Pandas_数据结构详解
数据结构·python·pandas
小言从不摸鱼4 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
C-SDN花园GGbond4 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处5 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ6 小时前
Java 23 的12 个新特性!!
java·开发语言·学习