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

news2024/11/26 20:19:07

前言

在讲类之前,我们简单介绍一些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. 选择身边的一种事物,真实存在和虚拟存在都行,抽象该事物的特点和行为,定义一个类。要求设置这个类的某个属性具备默认值,需要定义修改某些属性的函数。最后实例化该类,调用函数,修改属性值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1832462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vivado NODE、PACKAGE_PIN

节点是Xilinx部件上用于路由连接或网络的设备对象。它是一个 WIRE集合,跨越多个瓦片,物理和电气 连接在一起。节点可以连接到单个SITE_, 而是简单地将NETs携带进、携带出或携带穿过站点。节点可以连接到 任何数量的PIP,并且也可以…

升级到tomcat10和Java 21后,idea控制台system.out.println输出中文乱码问题

最近一次性从tomcat 9升级到tomcat 10,同时Java sdk也从1.8升级到21。 升级过程中,当然会遇到很多问题,但是控制台输出中文乱码问题,着实折腾了很久。 1、尝试各种方法 网上说的很多通用方法都试过了,就是不生效。包…

论文学习_Large Language Models Based Fuzzing Techniques: A Survey

论文名称发表时间发表期刊期刊等级研究单位 Large Language Models Based Fuzzing Techniques: A Survey 2024年arXiv- 悉尼大学 0.摘要 研究背景在软件发挥举足轻重作用的现代社会,软件安全和漏洞分析对软件开发至关重要,模糊测试作为一种高效的软件…

苹果电脑病毒怎么处理 苹果电脑病毒查杀用什么软件 苹果电脑病毒软件

苹果电脑并不是完全免疫于病毒的威胁,尤其是在使用了一些不安全的软件或网站后,可能会感染一些恶意程序,导致电脑运行缓慢,数据丢失,甚至被黑客控制。那么,苹果电脑病毒怎么处理呢?苹果电脑病毒…

Confluence 可以用哪些开源知识库替换?盘点主流的11款

Confluence 本身并不是开源的,而是一个基于订阅模式的商业产品。而类似于confluence的有11款知识库软件,包括:PingCode 知识库、BlueSpice、MediaWiki、DokuWiki、Nuclino、ClickUp、XWiki、BookStack、TiddlyWiki、Bloomfire 和 Quip。 虽然…

C# 通过Win32API设置客户端系统时间

在日常工作中,有时可能会需要获取或修改客户端电脑的系统时间,比如软件设置了Licence有效期,预计2024-06-01 00:00:00到期,如果客户手动修改了客户端电脑时间,往前调整了一年,则软件就可以继续使用一年&…

c++编程(19)——STL(5)容器适配器

欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 适配器adaptorstackqueuepriority_queue传送门: 适配器adaptor 适配器看起来像一个容器,实际上adaptor并不属于容器的范畴,更像是一种专门用于某种容器的接口。 常用的适…

【实用工具】Skyworking

文章目录 一、Skywalking概述1.1 核心功能1.2 指标概述1.2.1 一些常用指标1.2.2 指标的使用方式 二、仪表盘2.1 APM2.1.1 全局维度的指标2.1.2 服务维度的指标2.1.3 实例维度的指标2.1.4 端点维度的指标 2.2 数据库2.3 其他 三、追踪3.1 界面划分3.2 请求链路界面分析3.3 一般流…

保姆级pycharm远程连接linux服务器

1、登录服务器,创建账号。 一般都是管理员账户登录,创建自己的账号。如果不需要,可跳过这步。 打开MobaXterm,点击左上角Session创建会话。 再点击左上角SSH,分别输入服务器ip和账号,最后点ok,进…

【第16章】Vue实战篇之跨域解决

文章目录 前言一、浏览器跨域二、配置代理1.公共请求2.代理配置 总结 前言 前后端项目分离衍生出浏览器跨域问题,开发之前我们通过配置代理解决这个问题。 一、浏览器跨域 浏览器的跨域问题主要是由于浏览器的同源策略导致的。同源策略是浏览器的一个安全功能&…

Web应用安全测试-综合利用(一)

Web应用安全测试-综合利用(一) 文章目录 Web应用安全测试-综合利用(一)1.跨站脚本攻击(XSS)漏洞描述测试方法GET方式跨站脚本Post方式跨站脚本 风险分析风险等级修复方案总体修复方式对于java进行的web业务…

openGauss 6.0高可用测试,系统上线前很关键

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

示例:WPF中应用Grid的SharedSizeGroup设置整齐的布局

一、目的&#xff1a;应用Grid的SharedSizeGroup设置整齐的布局 二、实现 <ItemsControl ItemsSource"{local:GetStudents Count5}"><ItemsControl.ItemTemplate><DataTemplate><Grid ShowGridLines"True"><Grid.ColumnDefinit…

编程之道:程序员必备的五大职业素养

引言 在数字化时代&#xff0c;程序员的角色变得日益重要。他们不仅是代码的编写者&#xff0c;更是技术变革的推动者。然而&#xff0c;成为一名优秀的程序员&#xff0c;除了技术能力之外&#xff0c;还需要具备一系列职业素养。本文将探讨程序员在职业生涯中应具备的五大职业…

美国犹他州立大学《Nature Geoscience》(IF=18)!揭示草本植物对土壤有机碳的重要贡献!

随着全球变暖的影响越来越显著&#xff0c;碳固定成为了一个备受关注的话题。在这个背景下&#xff0c;热带草原被认为是一个潜在的碳固定区域。然而&#xff0c;目前的研究主要关注于在热带草原中种植树木&#xff0c;以期望增加土壤有机碳含量。但是&#xff0c;热带草原中的…

万字长文详述 - 带你了解Jvm虚拟机运行时数据区

JVM虚拟机&#xff0c;对大部分Java程序员而言&#xff0c;是既熟悉又陌生的存在&#xff0c;Java程序在虚拟机的自动内存管理机制帮助下&#xff0c;减少了绝大部分的内存管理工作。但也正是因为如此&#xff0c;虚拟机如果出现了内存溢出或者泄露的情况&#xff0c;问题排查、…

NettyのEventLoopChannel

Netty的重要组件&#xff1a;EventLoop、Channel、Future & Promise、Handler & Pipeline、ByteBuf 本篇主要介绍Netty的EventLoop和Channel组件。 1、Netty入门案例 服务器端的创建&#xff0c;主要分为以下步骤&#xff1a; 创建serverBootstrap对象。配置服务器的…

10.Docker Compose容器编排

文章目录 Compose简介安装和卸载步骤核心概念compose文件两要素 使用步骤Compose常用命令微服务测试本地编码打包编写Dockerfile文件构建镜像 不使用Compose调试使用Compose调试WordPress测试验证增量更新 Compose简介 ​ docker建议我们每一个容器中只运行一个服务,因为docke…

Misc之图片隐写

前几天忙高数和c考试去了。。。Web毫无进展&#xff0c;学学这个放松一下 一、工具准备 这里目前使用的工具为kali上的工具和安装在电脑上的Winhex&#xff0c;010editor&#xff0c;Stegsolve 二、png图片隐写 这里我就直接用题目学习了&#xff0c;也是参考了csdn上大佬的…

05通讯录管理系统——添加联系人

功能描述&#xff1a;实现添加联系人功能&#xff0c;联系人上限为1000人&#xff0c;联系人信息包括姓名、性别、年龄、联系电话、家庭住址。 添加联系人实现步骤&#xff1a; 1.设计联系人结构体 2.设计通讯录结构体 3.main函数中创建通讯录 4.封装添加联系人函数 5.测…