当前位置: 首页 > news >正文

[Python]面向对象基础

请添加图片描述

文章目录

  • 视频链接
  • 学习目标
  • 1 理解面向对象
  • 2 类和对象
    • 2.1 理解类和对象
      • 2.1.1 类
      • 2.1.2 对象
    • 2.2 面向对象实现方法
      • 2.2.1 定义类
      • 2.2.2 创建对象
      • 2.2.3 体验类和对象
      • 2.2.4 self
      • 2.2.5 一个类创建多个对象
  • 3 添加和获取对象属性
    • 3.1 类外面添加对象属性
      • 3.1.1 体验类外面添加对象属性
    • 3.2 类外面获取对象属性
      • 3.2.1 体验类外面获取对象属性
    • 3.3 类里面获取对象属性
      • 3.3.1 体验类里面获取对象属性
  • 4 魔法方法
    • 4.1 `__init__()`
      • 4.1.1 体验`__init__()`
      • 4.1.2 带参数的`__init__()`
    • 4.2 `__str__()`
    • 4.3 `__del__()`


视频链接

根据视频进行整理
Python面向对象基础

学习目标

  1. 理解面向对象
  2. 类和对象
  3. 添加和获取对象属性
  4. 魔法方法

1 理解面向对象

面向对象是一种抽象化的编程思想。

在面向对象的编程思想中,一个程序可以认为是一个世界,在这个世界中有各种各样的事物(每个事物即为一个对象),事物即程序所涉及的现实生活存在的物品或者生命等。

在面向对象的思想中,实现功能都像日常生活中使用物品完成某项工作一样,我们不用像结构化编程思想(可以认为一个动作一个指令)那样,可以不用关系物品的内部是如何构成的,使用物品时直接调用对应的功能即可。

以洗衣服为例:
结构化编程(手洗):
找盆 => 放水 => 加洗衣粉 => 浸泡 => 搓洗 => 拧干水 => 倒水 => 漂洗 => 拧干 =>晾晒
面向对象编程(机洗):
打开洗衣机 => 放衣服 => 加洗衣粉 => 按下开始按钮(调用洗衣机洗衣服的功能) => 晾晒

2 类和对象

上述洗衣服的案例可以得到,我们使用洗衣机洗衣服,其实就是在使用一个我们世界存在的事物完成对应的工作。洗衣机是一个事物,即现实存在的事物就是对象。

洗衣机的制造是根据洗衣机的制作图纸制造的,同理,对象的制造也需要一个对应的图纸,我们将制造对象的图纸称为类。

由此,我们可以认为,类就是制造对象的图纸,一个对象就是一个事物。

类和对象的关系:用类创建对象

创建对象,又称为实例化。

2.1 理解类和对象

2.1.1 类

在洗衣机的制作图纸中,会标明洗衣机的尺寸大小,也会写明洗衣机的功能。

在程序中,洗衣机的尺寸大小等指标(特征),为变量;洗衣机的功能(行为)对应程序中的函数。

在面向对象中,类是对一系列具有相同特征和行为的事物统称,是一个抽象的概念,不是真实存在的事物。

在面向对象中,特征即属性;行为即方法

类的作用:用来创建对象

2.1.2 对象

对象是类创建出来的真实存在的事物,例如:上述例子中的洗衣机。

注意:先有类,再有对象。
先有洗衣机的制作图纸才能制造出洗衣机。

2.2 面向对象实现方法

2.2.1 定义类

语法:

class 类名():
	代码
	......

注意:类名要满足标识符命名规则,同时遵守大驼峰命名习惯

类名后的括号中写的是继承的类。

2.2.2 创建对象

对象,也可以称为实例。

用类创建的对象会具有类中的所有属性与方法。

语法:

对象名 = 类名()

注意:先有类,才有对象。

2.2.3 体验类和对象

函数写在类中,为实例方法,实例就是对象,所以实例方法又叫对象方法。
实例方法的调用:对象名.方法名()

"""
创建一个洗衣机
洗衣机的功能:洗衣服
"""
# 定义洗衣机类
class Washer():
  def wash(self):
    """
    洗衣机洗衣服的功能
    :return: 无返回值
    """
    print('正在洗衣服...')

# 创建洗衣机对象 -- 海尔牌洗衣机
haier = Washer()

# 验证
# 打印创建的haier对象
print(haier)
# 使用洗衣机的洗衣服功能
haier.wash()

在这里插入图片描述

2.2.4 self

self指的是调用该函数的对象。

"""
创建一个洗衣机
功能:洗衣服
"""
# 定义洗衣机类
class Washer():
  def wash(self):
    """
    洗衣机洗衣服的功能
    :return: 无返回值
    """
    print('正在洗衣服...')
    print(self)

# 创建洗衣机对象 -- 海尔牌洗衣机
haier = Washer()

# 验证
# 打印创建的haier对象
print(haier)
# 使用洗衣机的洗衣服功能
haier.wash() 

在输出结果中,打印的两个内存地址(对象的内存地址和self的内存地址)一致,所以,self指的是调用该函数的对象。
在这里插入图片描述

2.2.5 一个类创建多个对象

在现实生活中,根据一个洗衣机图纸可以制造无数个一样的洗衣机。在面向对象的编程中,根据一个类也可以创建出无数个一个的对象,创建的对象的个数根据实际需要而定。

class Washer():
    def wash(self):
        print('正在洗衣服...')
        print(self)

haier1 = Washer()
haier1.wash()
print(haier1)

haier2 = Washer()
haier2.wash()
print(haier1)

由结果可得:
一个类可以创建多个不同的对象;
self指的是调用该函数的对象。
在这里插入图片描述

3 添加和获取对象属性

对象的属性,即对象的特征,例如,洗衣机的宽、高、重量。

对象的属性既可以在类外面添加和获取,也能在类里面添加和获取。

给对象添加属性,是由于,不同的对象,会存在不同的特征。
如,海尔牌的洗衣机,存在不同尺寸的同一型号的洗衣机。

3.1 类外面添加对象属性

语法:

对象名.属性名 =

3.1.1 体验类外面添加对象属性

class Washer():
    def wash(self):
        print('正在洗衣服...')

haier1 = Washer()
# 为对象haier1添加对象属性
# 宽度
haier1.width = 400
# 高度
haier1.height = 600

3.2 类外面获取对象属性

语法:

对象名.属性名

3.2.1 体验类外面获取对象属性

class Washer():
    def wash(self):
        print('正在洗衣服...')

haier1 = Washer()

# 为对象haier1添加对象属性
# 宽度
haier1.width = 400
# 高度
haier1.height = 600

# 获取对象haier1的属性
print(f'洗衣机的宽度为{haier1.width}')
print(f'洗衣机的高度为{haier1.height}')

在这里插入图片描述

3.3 类里面获取对象属性

语法:

self.属性名

3.3.1 体验类里面获取对象属性

注意:
由于对象的属性是在创建对象后添加的,所以调用获取对象属性的方法一定要在添加属性之后。

由于self指的是调用方法的对象,所以在下面的代码中,self相当于haier1,当haier1调用获取对象属性的方法时,可以使用self在类里面获取对象属性。

class Washer():
    def wash(self):
        print('正在洗衣服...')

    # 获取对象的属性
    def print_info(self):
        print(f'洗衣机的宽度为{self.width}')
        print(f'洗衣机的高度为{self.height}')


haier1 = Washer()

# 为对象haier1添加对象属性
# 宽度
haier1.width = 400
# 高度
haier1.height = 600

# 调用对象获取对象属性的方法
haier1.print_info()

在这里插入图片描述

4 魔法方法

在Python中,形如__XX__()的函数叫做魔法方法,指的是具有特殊功能的函数

4.1 __init__()

4.1.1 体验__init__()

依旧以洗衣机为例,洗衣机的属性宽和高,在其制造出来是就已经具有,不是后期赋予的。所以,对象的有些属性,应当在其实例化时就应该具有。

__init__()方法的作用:初始化对象,即用于设置对象与生俱来的属性。

注意:
__init__()方法,在创建一个对象时默认被调用,不需要手动调用;
__init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。

# 定义init魔法方法初始化属性,并访问调用
# 定义类
class Washer():
    def __init__(self):
        self.width = 400
        self.height = 600

    def print_info(self):
        print(f'洗衣机的宽度为{self.width}')
        print(f'洗衣机的高度为{self.height}')


# 创建对象
haier = Washer()

# 验证
haier.print_info()

在这里插入图片描述

4.1.2 带参数的__init__()

一个类可以创建不同的对象,使用带参数的__init__()魔法方法可以在实例化对象时,为不同的对象指定不同的初始化属性值。

由于在创建对象的时候会自动调用__init__()方法,所以__init__()方法的参数在创建对象时的类名(参数1, 参数2, ...)传递。

注意:
如果__init__()方法需要传参,而在创建对象的时候没有进行传参,会报错。

# 定义init魔法方法初始化属性,并访问调用
# 定义类
class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def print_info(self):
        print(f'洗衣机的宽度为{self.width}')
        print(f'洗衣机的高度为{self.height}')


# 创建对象
haier1 = Washer(400, 600)
haier2 = Washer(500, 800)

# 验证
haier1.print_info()
print()
haier2.print_info()

在这里插入图片描述

4.2 __str__()

当我们使用print()输出对象时,默认打印对象的内存地址,如果类定义了__str__()方法,就会打印从这个方法中return的数据

一般__str__()方法中放的为解释说明的内容,如,解释说明类的作用,类的状态等。

# 定义类
class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def __str__(self):
        return '类的解释说明'


# 创建对象
haier1 = Washer(400, 600)

# 验证
print(haier1)

在这里插入图片描述

4.3 __del__()

当删除对象时,python解释器会默认调用__del__()方法。

当整个程序执行完成,系统会自动进行清除,所以不主动调用del 对象名,对象最终也会被删除,对象的__del__()方法也会被自动调用。

# 定义类
class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def __del__(self):
        print(f'{self}对象被删除...')


# 创建对象
haier1 = Washer(400, 600)

# 验证
print(haier1)

在这里插入图片描述

相关文章:

  • 分布式存储之hash取余算法
  • Selenium特殊场景问题汇总
  • C++数据结构课程设计
  • R语言:岭回归分析选择变量
  • 波场合约交易记录查询易语言代码
  • 开发工程师必备————【Day26】Django补充(三)
  • 秒杀系统(1)——秒杀功能设计理念
  • [数据结构]~栈和队列(0-1)
  • 猿创征文|十 BLE协议之L2CAP
  • tomcat的初期了解
  • 羊城杯2022 部分web
  • 音视频图像篇 YUV-RGB
  • 【Python 实战基础】Pandas如何从字符串中解析某一数据,并统计多于一次的该数据
  • Bus:消息总线
  • SpringBoot - 用maven-dependency-plugin插件将项目代码与依赖分开打包
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【EOS】Cleos基础
  • Android单元测试 - 几个重要问题
  • CSS3 变换
  • CSS盒模型深入
  • CSS中外联样式表代表的含义
  • ES6语法详解(一)
  • go语言学习初探(一)
  • JavaScript DOM 10 - 滚动
  • Javascript编码规范
  • JavaScript实现分页效果
  • js 实现textarea输入字数提示
  • orm2 中文文档 3.1 模型属性
  • PAT A1092
  • Redis字符串类型内部编码剖析
  • SpiderData 2019年2月16日 DApp数据排行榜
  • tensorflow学习笔记3——MNIST应用篇
  • vue 配置sass、scss全局变量
  • 巧用 TypeScript (一)
  • 三分钟教你同步 Visual Studio Code 设置
  • 深度学习中的信息论知识详解
  • 原生 js 实现移动端 Touch 滑动反弹
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • Spring Batch JSON 支持
  • 仓管云——企业云erp功能有哪些?
  • #include到底该写在哪
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (1)bark-ml
  • (ibm)Java 语言的 XPath API
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (离散数学)逻辑连接词
  • (论文阅读40-45)图像描述1
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)ORM
  • (转)Scala的“=”符号简介
  • .NET 5种线程安全集合
  • .net 7 上传文件踩坑
  • .Net Core webapi RestFul 统一接口数据返回格式