Python学习笔记12:进阶篇(一),类的相关知识

前言

在讲类之前,我们简单介绍一些Python的知识。这些知识在入门篇没讲,想学Python的,基本都对Python有基础的了解,但是今天开始的进阶知识,会涉及到一些Python的特性,所以在这里介绍一下。
Python是一种高级、通用的编程语言,由Guido van Rossum在1989年底发明,并于1991年首次发布。

以下是Python的一些基本信息:

  1. 易读性与简洁性:Python以其清晰的语法和可读性强而著称,经常被描述为“接近自然语言”的编程语言,适合初学者学习,同时也被专业开发者广泛采用。
  2. 解释型语言:Python是一种解释型语言,意味着代码在执行时被逐行解释成机器语言,而不是事先编译成可执行文件。
  3. 跨平台:Python可在多种操作系统上运行,包括Windows、Linux、macOS等,具有很好的跨平台兼容性。
  4. 广泛的标准库:Python自带一个庞大且功能丰富的标准库,覆盖了网络编程、文本处理、数据库访问、图形用户界面等多个领域,便于开发者快速实现功能。
  5. 面向对象:如前所述,Python支持面向对象编程范式,允许定义类和对象,实现封装、继承和多态。
  6. 动态类型系统:Python是动态类型的,变量不需要预先声明类型,类型可以在运行时自动推断。
  7. 支持多种编程范式:除了面向对象编程,Python还支持过程式编程、函数式编程等多种编程风格。
  8. 强大的第三方库:Python拥有活跃的社区和海量的第三方库,如NumPy、Pandas用于数据分析,Django、Flask用于Web开发,TensorFlow、PyTorch用于机器学习等,极大丰富了其应用领域。
  9. 广泛应用:Python广泛应用于Web开发、数据科学、人工智能、自动化脚本、爬虫、教育等领域。
  10. 版本更新:当前Python有两个主要版本在使用中,分别是Python 2(不再维护)和Python 3(当前推荐使用的版本),两者之间存在一些不兼容的改变。

今天我们重点了解第五点,面向对象。今天的内容也从这里开始。

面向对象

什么是面向对象

面向对象(Object-Oriented Programming, OOP)是一种编程范式,它以“对象”为核心,将数据和操作数据的方法组织在一起,以此来模拟现实世界中的实体及其相互关系。

面向对象编程强调以下四个基本原则:

  1. 封装(Encapsulation):封装是指将数据(属性)和操作这些数据的方法(行为)捆绑在一起,并对外界隐藏其实现细节的过程。这样可以减少模块间的耦合,提高代码的安全性和复用性。
  2. 继承(Inheritance):继承允许创建一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用。子类可以覆盖或扩展父类的功能,以适应更具体的需求。
  3. 多态(Polymorphism):多态意味着一个接口可以有多种不同的实现方式。在面向对象的程序设计中,多态允许使用一个接口来表示多种类型的对象,从而让代码更加灵活和可扩展。
  4. 抽象(Abstraction):抽象是从具体事物中抽取关键特性和行为,忽略非本质细节,形成类或接口的过程。抽象类或接口提供了统一的操作接口,但可能并不包含具体的实现细节。
    通过这些原则,面向对象编程鼓励模块化和代码重用,使得大型软件项目的开发、维护和理解变得更加容易。

面向对象编程有哪些好处

  1. 封装(Encapsulation):
    • 提高数据安全性,通过限制直接访问对象内部状态,防止数据被误用或恶意修改。
    • 增强代码模块性,每个对象负责自己的行为和状态,使得代码易于理解、维护和调试。
  2. 继承(Inheritance):
    • 促进代码复用,子类可以继承父类的属性和方法,避免重复编写相似代码。
    • 支持层次结构,通过继承构建类的层次,使得代码组织更加有序,便于管理和扩展。
  3. 多态(Polymorphism):
    • 提升代码灵活性,允许使用一个接口来表示多种类型的对象,使程序能够在不修改现有代码的情况下应对变化。
    • 简化接口使用,用户无需了解对象的具体类型就能调用其方法,增加了代码的通用性和可扩展性。
  4. 模块化(Modularity):
    • 通过将复杂的系统分解为一系列相互协作的对象,使得问题更容易管理。
    • 改进团队协作,不同开发者可以独立工作于不同的模块,提高开发效率。
  5. 易维护性和可扩展性:
    • 更改通常仅限于单个对象或类,不会对整个系统造成广泛影响,降低了维护成本。
    • 新功能可以通过添加新类或修改现有类来轻松实现,支持系统的逐步进化。
  6. 抽象(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关键字,可以定义出一个类。那么这类为什么这么定义呢?

抽象化:简单来说就是总结规律,进行归纳,你可以把这个叫做抽象。

简单讲讲具体步骤:

  1. 使用class定义一个类,比如我们定义了一个person类。这个类,是某种对象的模拟。也就是说,我们通过对某种对象进行观察总结后,使用代码来模拟出这个对象。注意类名首字母大写,如果是多个单词每个单词首字母大写。
  2. 定义出类以后,我们需要总结归纳一下我们定义的类有哪些特点信息。比如人都有名字,有年龄,有性别,有身高,有体重等等。这些东西,在类里面叫做属性,又叫做成员变量。
  3. 总结出属性以后,我们需要把这些属性初始化设置给类。
  4. def init()。使用这个语法进行属性的定义和初始化,注意self是固定句式,第二个开始的才是属性。
  5. 除了对象的特点信息可以抽象成属性外,对象的某些特定的行为,我们也可以抽象称为类的函数,通过调用这个函数,就相当于对象进行了这个行为。
  6. 定义一个类的函数。def function_name。这个就不多讲了,刚学完。

这几个步骤下来,我们已经抽象出了一个person类。接下来学习怎么使用类。

怎么使用类

抽象出类以后,怎么使用这个类?
类是抽象出来的,一个抽象的东西肯定是要具现化出来才好使用的,我们大部分时候使用,也都是具现化以后进行使用。那么通过类具现化出来的东西,称之为实例。这个过程,也可以称作类的实例化。

# 实例化
moon = Person("明月", 28)
look = Person("望", 29)
# 太长了 就不用英文了,大家别学我
qiu_si = Person("秋思", 30)

# 操作一下,这三个实例调用一下introduce函数,这就是在模拟这个类的一种行为

在这里插入图片描述
上面就是一个简单的定义类后,实例化类,再执行类函数的示例。

这是类的简单使用。类的使用当然不止这些,但是我们现在先学习这些,慢慢的我们会深入的,别急。

属性的简单操作

  1. 设置默认值:很多时候,我们定义的类有某些属性在某些场景下的值是固定,比如我们出生的时候,国家都固定是中国,我们都是中国人,我们就不需要通过单独赋值来设置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,并且设置了值为"中国"。这个时候我们实例化类出来的三个实例,在我们没有设置实例的时候,自动的设置了中国。

  1. 设置属性值:很多时候,我们实例化出来的实例对象,在程序运行过程中的属性值并不是一成不变的,而是会根据各种条件发生变化,那么我们应怎么设置属性值呢?通常有三种方法。

    • 对象名.属性名的方式进行赋值
    # 实例化
    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()
    

    在这里插入图片描述

作业

  1. 总结一下什么是面向对象编程?了解一下什么是面向过程编程。
  2. 选择身边的一种事物,真实存在和虚拟存在都行,抽象该事物的特点和行为,定义一个类。要求设置这个类的某个属性具备默认值,需要定义修改某些属性的函数。最后实例化该类,调用函数,修改属性值。

相关推荐

  1. 90天玩转Python14—基础知识:变量

    2024-06-18 00:06:04       33 阅读
  2. python学习笔记----函数(七)

    2024-06-18 00:06:04       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 00:06:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 00:06:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 00:06:04       87 阅读
  4. Python语言-面向对象

    2024-06-18 00:06:04       96 阅读

热门阅读

  1. LeetCode 58. 最后一个单词的长度

    2024-06-18 00:06:04       32 阅读
  2. 关于lspci命令的相关使用

    2024-06-18 00:06:04       26 阅读
  3. Glide 缓存机制研究及同命名图片的替换回显

    2024-06-18 00:06:04       26 阅读
  4. 多模态AI和机器人技术的演变

    2024-06-18 00:06:04       29 阅读
  5. C++ day3

    C++ day3

    2024-06-18 00:06:04      27 阅读
  6. Spring事务管理与Spring AOP详解

    2024-06-18 00:06:04       32 阅读
  7. MTU简介

    2024-06-18 00:06:04       32 阅读
  8. C语言笔记25 •顺序表介绍•

    2024-06-18 00:06:04       31 阅读
  9. 什么是内存泄漏?如何避免?

    2024-06-18 00:06:04       32 阅读
  10. spring-websocket实现(一)

    2024-06-18 00:06:04       32 阅读