1、理解类和对象

(1)类和对象的关系

  • 思考:洗衣机洗衣服描述过程中,洗衣机其实就是一个事物,即对象,洗衣机对象哪来的呢?

    答:洗衣机是由工厂工人制作出来。

  • 思考:工厂工人怎么制作出的洗衣机?

    答:工人根据设计师设计的功能图纸制作洗衣机。

  • 归纳:图纸 → 洗衣机 → 洗衣服。

(2)总结:

  • 在面向对象编程过程中,有两个重要组成部分:对象
  • 类和对象的关系:用类去创建(实例化)一个对象。

2、类

类是用于描述现实事物的,它将现实中一系列具有相同特征和行为的事物进行抽象化,模板化描述,事物的特点(属性)和行为封装在其中。

类是一个抽象的概念,不是真实存在的事物。

比如是制造洗衣机时要用到的图纸,图纸上有洗衣机的长、宽、高、形状等参数,根据图纸(类)来生产(创建)洗衣机(对象),也就是说类是用来创建对象的模版。

如下图所示:

换句话说类也是一个对象,类就是一个用来创建对象的对象。类是type类型(<class 'type'>)的对象,定义类实际上就是定义了一个type类型的对象。

实际上所有的事物都由两部分构成:

  • 特征(数据)即是属性
  • 行为(功能)即是方法

属性和行为统称为事物中的成员,我们也称之为成员属性和成员行为。

  • 成员属性在代码中的体现就是成员变量。
  • 成员行为在代码中的体现就是成员函数(方法)。

3、对象

对象是类创建出来的真实存在的事物,是现实生活中存在的具体实例、个体,即生活看到每一个事物,例如,洗衣机。

创建好对象的,通过对象就可以调用具体的属性和行为。比如真是存在的洗衣机就可以洗衣服了。

如下图:

注意:开发中,先有类,再有对象。

4、Python中的对象

  • Python中对象是内存中专门用来存储数据的一块区域。
  • 对象中可以存放各种数据(比如:数字、布尔值、代码)
  • 对象由三部分组成:
    1. 对象的标识(id):每个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id() 来得到。
    2. 对象的类型(type):对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以使用type()函数查看Python对象的类型。type()返回的是对象而不是简单的字符串。
    3. 对象的值(value):对象表示的数据。
  • 任何对象的idtype,自对象创建完成就都是不可变的。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)为类,或类的一个元组,如(intlistfloat)。

返回值:

  • 回值为布尔型(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、类和对象的更多相关文章

  1. 『无为则无心』Python面向对象 — 45、面向对象编程

    目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...

  2. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

  3. 『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)

    Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的. 关于私有方法其实和私有属性差不多,有如下要点: 1.通常我们约定,两个下划线开头的方法是私有方法. 2.类内部 ...

  4. 『无为则无心』Python面向对象 — 53、对Python中封装的介绍

    目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...

  5. 『无为则无心』Python面向对象 — 60、魔法属性

    目录 1.魔法属性__name__ 2.魔法属性__bases__ 3.魔法属性__mro__ 4.魔法属性__doc__ 5.魔法属性__module__ 和__class__ 6.魔法属性__di ...

  6. 『无为则无心』Python面向对象 — 56、Python多态

    目录 1.Python中的多态 (1)多态的定义 (2)多态的好处 (3)多态实现步骤 2.体验多态 1.Python中的多态 (1)多态的定义 多态是一种使用对象的方式,子类重写父类方法,不同的子类 ...

  7. 『无为则无心』Python面向对象 — 47、Python中的self详解

    目录 1.self的作用 2.self的使用注意事项 (1)self代表类的实例,而非类 (2)self不必非写成self,只是一种规范. (3)类中方法的形参中一定要写self,包括内置函数 (4) ...

  8. 『无为则无心』Python面向对象 — 54、重写和super()函数

    目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...

  9. 『无为则无心』Python面向对象 — 55、多层继承和继承中的私有成员

    目录 1.Python支持多层继承 (1)多层继承实现 (2)多层继承和多重继承区别 2.继承中的私有成员 (1)继承中父类私有属性和私有方法 (2)获取和修改私有属性值 1.Python支持多层继承 ...

随机推荐

  1. 一站式搭建 GitHub Pages 博客 (一)

    本文将详细讲解如何快速搭建 GitHub Pages 博客页面 关于博客主题,博客信息更改,上传文章等将会在 一站式搭建 GitHub Pages 博客 (二) 中进行详细讲解 准备阶段 注册 Git ...

  2. HDU 1576 A/B (两种解法)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 分析:等式枚举法,由题意可得:, ,代入 ,    得:,把变量 合在一起得: :即满足 为 倍 ...

  3. docker的安装以及使用命令

    docker的安装 安装docker https://docs.docker.com/install/linux/docker-ce/centos/#set-up-the-repository 从 2 ...

  4. leetcode 787. K 站中转内最便宜的航班

    问题描述 有 n 个城市通过 m 个航班连接.每个航班都从城市 u 开始,以价格 w 抵达 v. 现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到从 src 到 dst ...

  5. Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值

    本文为博主原创,转载请注明出处: 最近在进行压测,为了观察并定位服务性能的瓶颈,所以在代码中很多地方加了执行耗时的日志,但这种方式只能观察,却在压测的时候,不太能准确的把握代码中某些方法的性能,所以想 ...

  6. lua之自索引

    Father={ a=100, b=200 } function Father:dis() print(self.a,self.b) end Father.__index=Father Son= { ...

  7. golang中结构体当做函数参数或函数返回值都会被拷贝

    1. 结构体做函数的参数或返回值时,都会被重新拷贝一份如果不想拷贝,可以传递结构体指针 package main import "fmt" type Person struct { ...

  8. linux下查看开放的端口

    Nmap是一款针对大型网络的端口扫描工具,它也适用于单机扫描,它支持很多扫描,也同时支持性能和可靠性统计. [root@localhost ~]# yum install namp [root@loc ...

  9. linux中rpm安装

    目录 一:linux中rpm安装 1.rpm简介 2.区别 3.RPM命令五种基本模式 二:RPM安装全面解析 1,下载软件包 2, 安装软件包 3, 尝试卸载 4, 更新(升级) 5,软件包名称: ...

  10. 创建一个python类 ,self init相关参数的简单介绍

    一 创建 ''' 一 使用python 语法 创建一个类, 探究self 是干啥的 1 创建一个对象 car 2 写入两个行参 3 定义两个方法 ''' class Car(): ''' 二 init ...