前言
在讲类之前,我们简单介绍一些Python的知识。这些知识在入门篇没讲,想学Python的,基本都对Python有基础的了解,但是今天开始的进阶知识,会涉及到一些Python的特性,所以在这里介绍一下。
Python是一种高级、通用的编程语言,由Guido van Rossum在1989年底发明,并于1991年首次发布。
以下是Python的一些基本信息:
- 易读性与简洁性:Python以其清晰的语法和可读性强而著称,经常被描述为“接近自然语言”的编程语言,适合初学者学习,同时也被专业开发者广泛采用。
- 解释型语言:Python是一种解释型语言,意味着代码在执行时被逐行解释成机器语言,而不是事先编译成可执行文件。
- 跨平台:Python可在多种操作系统上运行,包括Windows、Linux、macOS等,具有很好的跨平台兼容性。
- 广泛的标准库:Python自带一个庞大且功能丰富的标准库,覆盖了网络编程、文本处理、数据库访问、图形用户界面等多个领域,便于开发者快速实现功能。
- 面向对象:如前所述,Python支持面向对象编程范式,允许定义类和对象,实现封装、继承和多态。
- 动态类型系统:Python是动态类型的,变量不需要预先声明类型,类型可以在运行时自动推断。
- 支持多种编程范式:除了面向对象编程,Python还支持过程式编程、函数式编程等多种编程风格。
- 强大的第三方库:Python拥有活跃的社区和海量的第三方库,如NumPy、Pandas用于数据分析,Django、Flask用于Web开发,TensorFlow、PyTorch用于机器学习等,极大丰富了其应用领域。
- 广泛应用:Python广泛应用于Web开发、数据科学、人工智能、自动化脚本、爬虫、教育等领域。
- 版本更新:当前Python有两个主要版本在使用中,分别是Python 2(不再维护)和Python 3(当前推荐使用的版本),两者之间存在一些不兼容的改变。
今天我们重点了解第五点,面向对象。今天的内容也从这里开始。
面向对象
什么是面向对象
面向对象(Object-Oriented Programming, OOP)是一种编程范式,它以“对象”为核心,将数据和操作数据的方法组织在一起,以此来模拟现实世界中的实体及其相互关系。
面向对象编程强调以下四个基本原则:
- 封装(Encapsulation):封装是指将数据(属性)和操作这些数据的方法(行为)捆绑在一起,并对外界隐藏其实现细节的过程。这样可以减少模块间的耦合,提高代码的安全性和复用性。
- 继承(Inheritance):继承允许创建一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用。子类可以覆盖或扩展父类的功能,以适应更具体的需求。
- 多态(Polymorphism):多态意味着一个接口可以有多种不同的实现方式。在面向对象的程序设计中,多态允许使用一个接口来表示多种类型的对象,从而让代码更加灵活和可扩展。
- 抽象(Abstraction):抽象是从具体事物中抽取关键特性和行为,忽略非本质细节,形成类或接口的过程。抽象类或接口提供了统一的操作接口,但可能并不包含具体的实现细节。
通过这些原则,面向对象编程鼓励模块化和代码重用,使得大型软件项目的开发、维护和理解变得更加容易。
面向对象编程有哪些好处
- 封装(Encapsulation):
- 提高数据安全性,通过限制直接访问对象内部状态,防止数据被误用或恶意修改。
- 增强代码模块性,每个对象负责自己的行为和状态,使得代码易于理解、维护和调试。
- 继承(Inheritance):
- 促进代码复用,子类可以继承父类的属性和方法,避免重复编写相似代码。
- 支持层次结构,通过继承构建类的层次,使得代码组织更加有序,便于管理和扩展。
- 多态(Polymorphism):
- 提升代码灵活性,允许使用一个接口来表示多种类型的对象,使程序能够在不修改现有代码的情况下应对变化。
- 简化接口使用,用户无需了解对象的具体类型就能调用其方法,增加了代码的通用性和可扩展性。
- 模块化(Modularity):
- 通过将复杂的系统分解为一系列相互协作的对象,使得问题更容易管理。
- 改进团队协作,不同开发者可以独立工作于不同的模块,提高开发效率。
- 易维护性和可扩展性:
- 更改通常仅限于单个对象或类,不会对整个系统造成广泛影响,降低了维护成本。
- 新功能可以通过添加新类或修改现有类来轻松实现,支持系统的逐步进化。
- 抽象(Abstraction):
- 通过抽象类和接口,将实现细节与高层逻辑分离,使得程序员可以专注于解决问题的逻辑而非底层机制。
- 有助于设计阶段的概念清晰表达,便于讨论和验证系统架构。
上面这些,都是在学习类之前,要了解的东西。在面向对象编程的语言中,类是非常重要的。而Python,也是面向对象编程的一门语言。
类
什么是类
类(Class)是面向对象编程的基础构造块,用于定义具有相同属性(成员变量)和方法(成员函数)的对象的蓝图。
怎么定义一个类
class Person:
"""简单模拟人,抽象出一个类"""
def __init__(self, name, age):
"""初始化人的属性:名称,年龄"""
self.name = name
self.age = age
def introduce(self):
"""模拟人做自我介绍,这是一种行为"""
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
如代码所示,使用class关键字,可以定义出一个类。那么这类为什么这么定义呢?
抽象化:简单来说就是总结规律,进行归纳,你可以把这个叫做抽象。
简单讲讲具体步骤:
- 使用class定义一个类,比如我们定义了一个person类。这个类,是某种对象的模拟。也就是说,我们通过对某种对象进行观察总结后,使用代码来模拟出这个对象。注意类名首字母大写,如果是多个单词每个单词首字母大写。
- 定义出类以后,我们需要总结归纳一下我们定义的类有哪些特点信息。比如人都有名字,有年龄,有性别,有身高,有体重等等。这些东西,在类里面叫做属性,又叫做成员变量。
- 总结出属性以后,我们需要把这些属性初始化设置给类。
- def init()。使用这个语法进行属性的定义和初始化,注意self是固定句式,第二个开始的才是属性。
- 除了对象的特点信息可以抽象成属性外,对象的某些特定的行为,我们也可以抽象称为类的函数,通过调用这个函数,就相当于对象进行了这个行为。
- 定义一个类的函数。def function_name。这个就不多讲了,刚学完。
这几个步骤下来,我们已经抽象出了一个person类。接下来学习怎么使用类。
怎么使用类
抽象出类以后,怎么使用这个类?
类是抽象出来的,一个抽象的东西肯定是要具现化出来才好使用的,我们大部分时候使用,也都是具现化以后进行使用。那么通过类具现化出来的东西,称之为实例。这个过程,也可以称作类的实例化。
# 实例化
moon = Person("明月", 28)
look = Person("望", 29)
# 太长了 就不用英文了,大家别学我
qiu_si = Person("秋思", 30)
# 操作一下,这三个实例调用一下introduce函数,这就是在模拟这个类的一种行为
上面就是一个简单的定义类后,实例化类,再执行类函数的示例。
这是类的简单使用。类的使用当然不止这些,但是我们现在先学习这些,慢慢的我们会深入的,别急。
属性的简单操作
- 设置默认值:很多时候,我们定义的类有某些属性在某些场景下的值是固定,比如我们出生的时候,国家都固定是中国,我们都是中国人,我们就不需要通过单独赋值来设置country这个属性,而是通过设置默认值来简化代码。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
self.country = "中国" # 设置默认值
def introduce(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old, i come from {self.country} .") # 修改下打印信息
在图片中,我们给person设置了一个属性为country,并且设置了值为"中国"。这个时候我们实例化类出来的三个实例,在我们没有设置实例的时候,自动的设置了中国。
-
设置属性值:很多时候,我们实例化出来的实例对象,在程序运行过程中的属性值并不是一成不变的,而是会根据各种条件发生变化,那么我们应怎么设置属性值呢?通常有三种方法。
- 对象名.属性名的方式进行赋值
# 实例化 moon = Person("明月", 28) look = Person("望", 29) # 太长了 就不用英文了,大家别学我 qiu_si = Person("秋思", 30) # 修改属性的值 moon.age = 29 look.age = 30 qiu_si.age = 31 # 调用实例的方法 moon.introduce() look.introduce() qiu_si.introduce()
我们实例化出三个实例对象后,使用对象名.属性名的方式修改了三个实例的年龄,最后输出的年龄也正是修改后的年龄。- 通过函数修改属性的值:在类中定义一个函数,根据自己的想法设置属性值。
我们在类里面定义了一个新的函数,用于设置age的值。在实例化以后,通过调用这个函数,修改三个实例age的属性值。
class Person: def __init__(self, name, age): self.name = name self.age = age self.country = "中国" # 设置默认值 def introduce(self): print(f"Hello, my name is {self.name} and I am {self.age} years old, i come from {self.country} .") # 修改下打印信息 def change_age(self, age): self.age = age # 实例化 moon = Person("明月", 28) look = Person("望", 29) # 太长了 就不用英文了,大家别学我 qiu_si = Person("秋思", 30) # 修改属性的值 moon.change_age(27) look.change_age(28) qiu_si.change_age(29) # 调用实例的方法 moon.introduce() look.introduce() qiu_si.introduce()
作业
- 总结一下什么是面向对象编程?了解一下什么是面向过程编程。
- 选择身边的一种事物,真实存在和虚拟存在都行,抽象该事物的特点和行为,定义一个类。要求设置这个类的某个属性具备默认值,需要定义修改某些属性的函数。最后实例化该类,调用函数,修改属性值。