热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python编程基础之类和对象

这篇文章主要为大家详细介绍了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的属性赋值才会创建属于实例对象的属性。

总结

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


推荐阅读
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
author-avatar
wymanNi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有