『无为则无心』Python面向对象 — 46、类和对象
1、理解类和对象
(1)类和对象的关系
思考:洗衣机洗衣服描述过程中,洗衣机其实就是一个事物,即对象,洗衣机对象哪来的呢?
答:洗衣机是由工厂工人制作出来。思考:工厂工人怎么制作出的洗衣机?
答:工人根据设计师设计的功能图纸制作洗衣机。归纳:图纸 → 洗衣机 → 洗衣服。
(2)总结:
- 在面向对象编程过程中,有两个重要组成部分:类 和 对象。
- 类和对象的关系:用类去创建(实例化)一个对象。
2、类
类是用于描述现实事物的,它将现实中一系列具有相同特征和行为的事物进行抽象化,模板化描述,事物的特点(属性)和行为封装在其中。
类是一个抽象的概念,不是真实存在的事物。
比如是制造洗衣机时要用到的图纸,图纸上有洗衣机的长、宽、高、形状等参数,根据图纸(类)来生产(创建)洗衣机(对象),也就是说类是用来创建对象的模版。
如下图所示:

换句话说类也是一个对象,类就是一个用来创建对象的对象。类是type类型(<class 'type'>)的对象,定义类实际上就是定义了一个type类型的对象。
实际上所有的事物都由两部分构成:
- 特征(数据)即是属性
- 行为(功能)即是方法
属性和行为统称为事物中的成员,我们也称之为成员属性和成员行为。
- 成员属性在代码中的体现就是成员变量。
- 成员行为在代码中的体现就是成员函数(方法)。
3、对象
对象是类创建出来的真实存在的事物,是现实生活中存在的具体实例、个体,即生活看到每一个事物,例如,洗衣机。
创建好对象的,通过对象就可以调用具体的属性和行为。比如真是存在的洗衣机就可以洗衣服了。
如下图:

注意:开发中,先有类,再有对象。
4、Python中的对象
- Python中对象是内存中专门用来存储数据的一块区域。
- 对象中可以存放各种数据(比如:数字、布尔值、代码)
- 对象由三部分组成:
- 对象的标识(
id):每个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id() 来得到。 - 对象的类型(
type):对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以使用type()函数查看Python对象的类型。type()返回的是对象而不是简单的字符串。 - 对象的值(
value):对象表示的数据。
- 对象的标识(
- 任何对象的
id和type,自对象创建完成就都是不可变的。value可变就是可变数据类型,value不可变的数据类型叫不可变数据类型
5、类和对象的定义
(1)定义类
Python2中类分为:经典类 和 新式类。
新式类语法:
class 类名():
代码
......
注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯(可以查看【变量】文章中关于命名的内容)。
新式类体验:
# 定义一个洗衣机类
class Washer():
# 功能洗衣服
def wash(self):
print('我会洗衣服')
拓展:经典类
不由任意内置类型派生出的类,称之为经典类(Python2中,知道就型)
# 新式类没有写类名后的(),就是经典类
class 类名:
代码
......
提示:Python 3.x中默认都是新式类。
(2)创建对象
对象也叫做实例。
语法:
对象名 = 类名()
体验:
# 通过上边创建的Washer类来创建洗衣机实例对象
# haier1就是一个Washer类型的实例对象
haier1 = Washer()
# 打印haier1对象,
# __main__表示主模块的标识符, 就是代表当前文件的标识符。
# <__main__.Washer object at 0x0000018B7B224240>
print(haier1)
# haier对象调用实例方法(洗衣服功能)
haier1.wash()
注意:创建对象的过程也叫实例化对象。
(3)练习
# 尝试定义一个表示人的类
class Person():
# 在类的代码块中,我们可以定义变量和函数
# 在类中我们所定义的变量,将会成为所有的实例的公共属性
# 公共属性,所有实例都可以访问
name = 'Python'
# 在类中也可以定义函数,类中的定义的函数,我们称为方法
# 这些方法可以通过该类创建的所有实例来访问
def say_hello(self):
# say_hello()这个方法,可以显示如下格式的数据:
# 你好!我是 xxx
# 在方法中不能直接访问类中的属性
print(f'你好!我是{name}')
# 创建Person的实例
p1 = Person()
p2 = Person()
# 获取对象属性,对象.属性名
result = p1.name
print(result) # Python
# 调用对象方法,对象.方法名()
p2.say_hello() # 你好!我是Python
6、拓展:isinstance() 函数
isinstance() 函数来判断一个对象是否是一个已知的类的实例。
isinstance() 函数的语法:
isinstance(object, classinfo)
参数说明:
- 其第一个参数(
object)为对象.- 第二个参数(
type)为类,或类的一个元组,如(int,list,float)。返回值:
- 回值为布尔型(True or flase)。
- 对象的类型与参数二的类型相同则返回True。
- 若参数二为一个元组,则若对象类型与元组中类型名之一相同即返回True。
示例:
# 1.数据类型
name = "孙悟空"
age = 18
print(isinstance(age, int)) # True
print(isinstance(age, float)) # False
print(isinstance(name, str)) # True
print(isinstance(name, list)) # False
print(isinstance(age, (int, list, float))) # True
print(isinstance(name, (int, list, float))) # False
# 2.对象
# 小花猫
class Cat():
pass
# 小奶狗
class Dog():
pass
# 蟒蛇
class Python():
pass
# 创建对象
cat = Cat()
dog = Dog()
python = Python()
print(isinstance(cat, Cat)) # True
print(isinstance(cat, (Cat, Dog))) # True
print(isinstance(cat, (Python, Dog))) # False
# 3.继承
# 定义一个父类
class Parent():
pass
# 定义一个子类
class Child(Parent):
pass
# 创建父类和子类对象
p = Parent()
c = Child()
print(isinstance(c, Child)) # True
print(isinstance(p, Parent)) # True
print(isinstance(c, Parent)) # True
print(isinstance(p, Child)) # False
# 总结:子类实例即属于子类类型,也属于父类类型,但父类实例不属于子类类型。
『无为则无心』Python面向对象 — 46、类和对象的更多相关文章
- 『无为则无心』Python面向对象 — 45、面向对象编程
目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...
- 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)
目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...
- 『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)
Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的. 关于私有方法其实和私有属性差不多,有如下要点: 1.通常我们约定,两个下划线开头的方法是私有方法. 2.类内部 ...
- 『无为则无心』Python面向对象 — 53、对Python中封装的介绍
目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...
- 『无为则无心』Python面向对象 — 60、魔法属性
目录 1.魔法属性__name__ 2.魔法属性__bases__ 3.魔法属性__mro__ 4.魔法属性__doc__ 5.魔法属性__module__ 和__class__ 6.魔法属性__di ...
- 『无为则无心』Python面向对象 — 56、Python多态
目录 1.Python中的多态 (1)多态的定义 (2)多态的好处 (3)多态实现步骤 2.体验多态 1.Python中的多态 (1)多态的定义 多态是一种使用对象的方式,子类重写父类方法,不同的子类 ...
- 『无为则无心』Python面向对象 — 47、Python中的self详解
目录 1.self的作用 2.self的使用注意事项 (1)self代表类的实例,而非类 (2)self不必非写成self,只是一种规范. (3)类中方法的形参中一定要写self,包括内置函数 (4) ...
- 『无为则无心』Python面向对象 — 54、重写和super()函数
目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...
- 『无为则无心』Python面向对象 — 55、多层继承和继承中的私有成员
目录 1.Python支持多层继承 (1)多层继承实现 (2)多层继承和多重继承区别 2.继承中的私有成员 (1)继承中父类私有属性和私有方法 (2)获取和修改私有属性值 1.Python支持多层继承 ...
随机推荐
- Windows 重装系统,配置 WSL,美化终端,部署 WebDAV 服务器,并备份系统分区
最新博客文章链接 最近发现我 Windows11 上的 WSL 打不开了,一直提示我虚拟化功能没有打开,但我看了下配置,发现虚拟化功能其实是开着的.然后试了各种方法,重装了好几次系统,我一个软件一个软 ...
- 网络协议学习笔记(八)DNS协议和HttpDNS协议
概述 上一篇主要讲解了流媒体协议和p2p协议,现在我给大家讲解一下关于DNS和HttpDNS的相关知识. DNS协议:网络世界的地址簿 在网络世界,也是这样的.你肯定记得住网站的名称,但是很难记住网站 ...
- sql审核-避免离线sql导致的db集群故障
关键词: sql审核.sql审批.sql检查.sql检测.sql执行 离线sql可能会导致的问题 首先,什么是离线sql呢?就是说手动触发执行的这种sql:相对的还有在线sql,位于我们的程序代码中, ...
- 模拟axios的创建[ 实现调用axios()自身发送请求或调用属性的方法发送请求axios.request() ]
1.axios 函数对象(可以作为函数使用去发送请求,也可以作为对象调用request方法发送请求) ❀ 一开始axios是一个函数,但是后续又给它添加上了一些属性[ 方法属性] ■ 举例子(axio ...
- golang中字符串-字节切片,字符串-字符切片的互转
package main import ( "fmt" "reflect" ) func B2S(bs []uint8) string { // 将字节切片转换 ...
- Maven作用及安装
与传统开发项目相比使用Maven: 1)Maven可以管理jar文件 2)自动下载jar和它的文档,源代码 3)管理jar直接的依赖,a.jar需要b.jar,maven会自动下载b.jar 4)管理 ...
- Elasticsearch使用系列-ES增删查改基本操作+ik分词
Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 一.安装可视化工具Kibana ES是一个NoSql数据库应用.和其他数据库 ...
- shell循环ping ip的写法
#!/bin/bash for i in `seq 1 20` do if ping -w 2 -c 1 192.168.43.$i | grep "100%" > /dev ...
- linux系统——Redis集群搭建(主从+哨兵模式)
趁着这几天刚好有点空,就来写一下redis的集群搭建,我跟大家先说明,本文的redis集群因为linux服务器只是阿里云一台服务器,所以集群是redis启动不同端口,但是也能达到集群的要求.其实不同服 ...
- 【Containerd版】Kubeadm高可用安装K8s集群1.23+
目录 基本环境配置 节点规划 网段规划及软件版本 基本配置 内核升级配置 K8s组件及Runtime安装 Containerd安装 K8s组件安装 高可用实现 集群初始化 Master01初始化 添加 ...