Python编程基础之类和对象

 更新时间:2022年01月26日 11:29:29   投稿:BJT  
这篇文章主要为大家详细介绍了Python的类和对象,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

零、本讲学习目标

  • 了解面向对象编程思想
  • 掌握类和对象的定义和使用
  • 了解Python中的对象

一、面向对象

(一)程序员“面向对象”

在现实世界中存在各种不同形态的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象间的关系来描述事物之间的联系,这种思想就是面向对象。

在这里插入图片描述

(二)两种编程思想实现五子棋

面向过程与面向对象的编程思想

在这里插入图片描述

若加入悔棋功能,面向过程和面向对象,分别怎么实现呢?

在这里插入图片描述

(三)面向过程 vs. 面向对象 

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候依次调用就可以了。(POP:Procedure-Oriented Programming)

面向对象则是把构成问题的事务按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。(OOP:Object-Oriented Programming)

(四)面向对象三大特点

面向对象是把构成问题的事务按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能,这样当应用程序功能发生变动时,只需要修改个别的对象就可以了,从而使代码更容易得到维护。面向对象的特点主要可以概括为封装性、继承性和多态性。

1、封装(encapsulation)

封装是面向对象的核心思想,将对象的属性(property)和行为(behavior)封装起来,不需要让外界知道具体实现细节。

2、继承(inheritance)

继承主要描述的就是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展(extend)。

3、多态(polymorphism)

多态指的是在一个类中定义的属性和功能被其他类继承后,当把子类对象直接赋值给父类引用变量时,相同引用类型的变量调用同一个方法所呈现出的多种不同行为特性。

二、类和对象

(一)类和对象的关系

1、概述

面向对象的编程思想,力图让程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出了两个概念——类和对象。

类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。简而言之,类是模板(template),对象是实例(instance)。

2、示意图

在这里插入图片描述

分析: 可以将上图人看作是一个类,将每个具体的人(如小韩、小石等)看作对象,从人与具体个人之间的关系便可以看出类与对象之间的关系。

说明: 类用于描述多个对象的共同特征,它是对象的模板,而对象用于描述现实中的个体,它是类的实例。对象是类的具体化,并且一个类可以对应多个对象。

(二)类的定义

1、类的构成 

  • 类的名称:类名,首字母必须大写,比如Person
  • 类的属性:一组数据,比如姓名、性别、年龄……(描述类的特征 - 静态)
  • 类的方法:允许进行操作的方法,比如说话、步行、跑步……(描述类的行为 - 动态)

2、类定义语法格式

使用class关键字来声明一个类

class 类名:
    类的属性
    类的方法

定义的类继承了一个或多个父类

class 类名(父类1, 父类2, …, 父类n):
    类的属性
    类的方法

3、案例演示

编写程序 - 类定义演示.py

swwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

(三)创建对象

1、语法格式

  • 利用无参构造方法创建对象:对象名 = 类名()
  • 利用有参构造方法创建对象:对象名 = 类名(参数列表)

2、给对象添加属性

对象名.新属性名 = 值

3、案例演示

编写程序 - 基于类创建对象.py

在这里插入图片描述

运行程序,查看结果

在这里插入图片描述

修改对象属性值,再访问对象方法

在这里插入图片描述

  • 由此可见,在Person类里定义三个属性name、gender、age,所有基于该类的对象都具有同样的初始值,然后可以根据需要修改对象的属性值。
  • 基于Person类再创建一个对象father,调用speak()方法,修改对象属性值,再调用speak()方法

在这里插入图片描述

 三、Python中的对象

(一)概述

  • 在前面,我们已使用过多种对象:整数对象、小数对象、字符串对象、函数对象、模块对象等。
  • 用dir()函数查看一个对象有哪些属性与方法

(二)常用对象

1、整数对象

(1)查看整数对象的属性和方法

执行:dir(int)

['__abs__',
 '__add__',
 '__and__',
 '__bool__',
 '__ceil__',
 '__class__',
 '__delattr__',
 '__dir__',
 '__divmod__',
 '__doc__',
 '__eq__',
 '__float__',
 '__floor__',
 '__floordiv__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__index__',
 '__init__',
 '__init_subclass__',
 '__int__',
 '__invert__',
 '__le__',
 '__lshift__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__neg__',
 '__new__',
 '__or__',
 '__pos__',
 '__pow__',
 '__radd__',
 '__rand__',
 '__rdivmod__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rfloordiv__',
 '__rlshift__',
 '__rmod__',
 '__rmul__',
 '__ror__',
 '__round__',
 '__rpow__',
 '__rrshift__',
 '__rshift__',
 '__rsub__',
 '__rtruediv__',
 '__rxor__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__truediv__',
 '__trunc__',
 '__xor__',
 'as_integer_ratio',
 'bit_length',
 'conjugate',
 'denominator',
 'from_bytes',
 'imag',
 'numerator',
 'real',
 'to_bytes']

(2)案例演示

查看整数的字节长度 - bit_length()

在这里插入图片描述

327的二进制位数是9,调用bin()函数将其转换成二进制:101000111(9位)

查看复数的实部和虚部

在这里插入图片描述

整数转换成字节数据 - to_bytes()

在这里插入图片描述

演示将整数1345转换成字节数据

在这里插入图片描述

演示将字节数据转换成整数

在这里插入图片描述

演示幂运算 - __pow__()

在这里插入图片描述

演示比较运算

在这里插入图片描述

2、小数对象

(1)查看小数对象的属性和方法

执行:dir(float)

['__abs__',
 '__add__',
 '__bool__',
 '__class__',
 '__delattr__',
 '__dir__',
 '__divmod__',
 '__doc__',
 '__eq__',
 '__float__',
 '__floordiv__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getformat__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__int__',
 '__le__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__neg__',
 '__new__',
 '__pos__',
 '__pow__',
 '__radd__',
 '__rdivmod__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rfloordiv__',
 '__rmod__',
 '__rmul__',
 '__round__',
 '__rpow__',
 '__rsub__',
 '__rtruediv__',
 '__set_format__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__truediv__',
 '__trunc__',
 'as_integer_ratio',
 'conjugate',
 'fromhex',
 'hex',
 'imag',
 'is_integer',
 'real']

(2)案例演示

保留小数位数 - __round__()

在这里插入图片描述

演示幂运算 - __pow__()

在这里插入图片描述

3、字符串对象

(1)查看字符串对象的属性和方法

执行:dir(str)

['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rmod__',
 '__rmul__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'capitalize',
 'casefold',
 'center',
 'count',
 'encode',
 'endswith',
 'expandtabs',
 'find',
 'format',
 'format_map',
 'index',
 'isalnum',
 'isalpha',
 'isascii',
 'isdecimal',
 'isdigit',
 'isidentifier',
 'islower',
 'isnumeric',
 'isprintable',
 'isspace',
 'istitle',
 'isupper',
 'join',
 'ljust',
 'lower',
 'lstrip',
 'maketrans',
 'partition',
 'replace',
 'rfind',
 'rindex',
 'rjust',
 'rpartition',
 'rsplit',
 'rstrip',
 'split',
 'splitlines',
 'startswith',
 'strip',
 'swapcase',
 'title',
 'translate',
 'upper',
 'zfill']

(2)案例演示

判断字符串是不是全为数字构成 - isdigit()

在这里插入图片描述

判断字符串是不是全为字母构成 - isalpha()

在这里插入图片描述

4、函数对象

定义函数

在这里插入图片描述

查看函数类型

在这里插入图片描述

将函数对象赋值给变量

在这里插入图片描述

5、模块对象

导入模块并查看类型

在这里插入图片描述

访问模块的属性与函数

在这里插入图片描述

将模块对象赋值给变量

在这里插入图片描述

 (三)两种对象

在Python的对象模型中,有两种对象:类对象和实例对象。类对象是在执行class语句时创建的,而实例对象是在调用类的时候创建的。每调用一次类,便创建一个实例对象。类对象只有一个,而实例对象可以有多个。类对象和每个实例对象都分别拥有自己的命名空间,在各自的命名空间内存储属于自己的数据。

1、类对象

  • Python执行class语句时创建一个类对象和一个变量(名称就是类名称),变量引用类对象。与def类似,class也是可执行语句。导入类模块时,class语句被执行,创建类对象。
  • 类中的赋值语句创建的变量是类的数据属性。与模块类似,类中的顶层赋值语句创建的变量才属于类对象。类的数据数据用“对象名.属性名”格式来访问。
  • 类中的def语句定义的函数是类的方法属性,用“对象名.方法名()”格式来访问。

类的数据和方法由所有的实例对象共享。

2、实例对象

  • 实例对象通过调用类对象来创建(就像调用函数一样来调用类对象)。
  • 每个实例对象继承类对象的属性,并获得自己的命名空间。
  • 实例对象的“私有”属性。类的方法函数的第一个参数默认为self,表示引用方法的对象实例。在方法中对self的属性赋值才会创建属于实例对象的属性。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!    

相关文章

  • Python爬虫爬取王者荣耀英雄信息并保存到图数据库的操作方法

    Python爬虫爬取王者荣耀英雄信息并保存到图数据库的操作方法

    本文介绍了如何使用Python爬虫技术从王者荣耀官方获取英雄信息,并将数据保存到图数据库中,文章详细说明了爬取英雄名称、类型及皮肤名称的过程,并展示了创建英雄类型节点和英雄信息节点的方法
    2024-09-09
  • 解决Jupyter因卸载重装导致的问题修复

    解决Jupyter因卸载重装导致的问题修复

    这篇文章主要介绍了解决Jupyter因卸载重装导致的问题修复,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 编写Python小程序来统计测试脚本的关键字

    编写Python小程序来统计测试脚本的关键字

    这篇文章主要介绍了编写Python小程序来统计测试脚本的关键字的方法,文中的实例不仅可以统计关键字数量,还可以按主关键字来归类,需要的朋友可以参考下
    2016-03-03
  • python 用struct模块解决黏包问题

    python 用struct模块解决黏包问题

    这篇文章主要介绍了python 用struct模块解决黏包问题,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • Python无头爬虫下载文件的实现

    Python无头爬虫下载文件的实现

    这篇文章主要介绍了Python无头爬虫下载文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python数据可视化教程之Matplotlib实现各种图表实例

    Python数据可视化教程之Matplotlib实现各种图表实例

    这篇文章主要给大家介绍了关于Python数据可视化教程之利用Matplotlib实现各种图表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2019-01-01
  • django实现前后台交互实例

    django实现前后台交互实例

    本篇文章主要介绍了django实现前后台交互实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Python中让MySQL查询结果返回字典类型的方法

    Python中让MySQL查询结果返回字典类型的方法

    这篇文章主要介绍了Python中让MySQL查询结果返回字典类型的方法,默认情况下Mysql返回的是元组类型,本文实现了返回字典类型,需要的朋友可以参考下
    2014-08-08
  • 一文教你使用Python实现本地分页

    一文教你使用Python实现本地分页

    这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下
    2025-02-02
  • Python图像处理模块ndimage用法实例分析

    Python图像处理模块ndimage用法实例分析

    这篇文章主要介绍了Python图像处理模块ndimage用法,结合实例形式分析了Python图像处理模块ndimage基本功能及常见的图形运算操作实现技巧,需要的朋友可以参考下
    2019-09-09

最新评论