当前位置 : 主页 > 编程语言 > python >

python 一文教你入门洗衣机行业,啊呸,是入门面向对象

来源:互联网 收集:自由互联 发布时间:2022-09-02
@[toc] 1. 深入理解面向对象 面向对象就是将编程当作一个事物,它对外界来说是直接可以使用的,而不需要在意内部的构造情况。这里的编程是指为事物创建一列动作。 为了方便大家理

@[toc]

1. 深入理解面向对象

面向对象就是将编程当作一个事物,它对外界来说是直接可以使用的,而不需要在意内部的构造情况。这里的编程是指为事物创建一列动作。

为了方便大家理解,以洗衣服这件事情为例。

  • 洗衣服可以有两种方式:手洗 和 机洗
  • ⼿手洗:找盆 - 放⽔水 - 加洗⾐衣粉 - 浸泡 - 搓洗 - 拧⼲干⽔水 - 倒⽔水 - 漂洗N次 - 拧⼲干 - 晾晒。

    image.png

    机洗:打开洗⾐衣机 - 放⾐衣服 - 加洗⾐衣粉 - 按下开始按钮 - 晾晒。

    image.png

    对于现代人来说,手洗已经很少了,多数采用机洗的方式。因为我们可以跳过繁琐的过程,好比要把大象塞进冰箱中的思路一样——打开冰箱,放进大象,关闭冰箱。

    img

    ==也就是说机洗使得洗衣服变得更加简单,而且高效!!!==

    这也就衍生出为什么面向对象很重要 —— 面向对象的编程可以使得代码的整体逻辑更简洁清晰。

    补充

    Q: python 面向对象相较于Java, C++ 等更加彻底,为什么?

    A: 因为我们所创建的一系列 list、str、dict、tuple等数据类型 都继承自 object,而 object 又继承自 type ,type又是自己的实例。简而言之:type 是起点,它制造了自己,然后制造了object这个对象,object对象和 type 产生了变量。

    image.png

    2. 类和对象的关系

    请先记住这句话:类创建对象

    同样,还是洗衣机的例子。

    Q1: 你们家的洗衣机怎么来的?A1 : 商场买来的。

    Q2 :商场中的洗衣机哪儿来的?A2: 工厂制造的。

    Q3: 工厂为什么会造洗衣机?A3:因为有设计图纸。

    img

    到此,通过三个Q & A, 引出了洗衣机产生的依据——设计图纸。总结上面的过程就是:

    设计图纸 ——> 洗衣机 ——> 洗衣服

    而其实这里的制造洗衣机的设计图纸就可以比作面向对象中的类, 而制造出来的洗衣机就是对象。

    也就是说类和对象的关系是 ==类创建对象==。而这里的创建一词其实也就是我们平常所说的实例化。

    3. 理解类和对象

    上一小节已经介绍了类和对象的关系,接下来深入理解类和对象

    3.1 类

    类的定义

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

    image.png

    同样以洗衣机为例

    • 洗衣机的特征(如长宽高、颜色等)--> 类的属性(也就是类中的变量)

    • 洗衣机的行为 (如是否要脱水,是否为速洗等) --> 类的方法(也就是类中的函数)

    3.2 对象

    对象的定义

    对象是类创建出来的真实存在的事物

    注意:

  • 开发中是先有类再有对象
  • 对象是真实存在的,而类并不是真实存在的
  • 4.面向对象实现方法

    4.1 定义一个类

    如果对前面理解透彻的话,那么现在就可以开始洗衣机图纸的设计了。

    python中类分为: 经典类 和 新式类

    • 语法
    class 类名(): ​ 代码

    注意: 类名要满足标识符命名规则,同时遵循==大驼峰命名法==

    4.2 创建对象

    对象又称是

    • 语法
    对象名 = 类名()

    4.3 类之初体验

    # 1. 定义洗衣机类 class Washer(): def wash(self): print("我是洗衣机") # 2. 创建对象/实例化对象 Haier = Washer() # 3. 验证成果 # 3.1 打印 haier对象 print(Haier) # 打印出了内存地址 <__main__.Washer object at 0x000001A8C23FAF40> # 3.2 使用wash功能 -- 实例方法/对象芳芳 --对项目.wahs() print(Haier.wash()) # 打印出了 "我是洗衣机"

    4.3 self 介绍

    上面的代码中是不是出现了一个self, 其实self 指的是调用该函数的对象,在上列中可以理解为haier这个实例对象。

    为什么可以这么说的,因为haier对象的地址和self地址是相同的,不信?见代码。

    class Washer(): def wash(self): print(self) Haier = Washer() print(Haier) # <__main__.Washer object at 0x000001A8C23EBE80> Haier.wash() # <__main__.Washer object at 0x000001A8C23EBE80>

    可以看到二者打印的地址是相同的

    结论:打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象

    4.4 一个类创建多个对象

    我们知道,一张图纸是可以用来制造非常多的洗衣机的,当工厂拿到图纸以后就可以批量生产了。

    image.png

    同理,我们的类也一样,可以创建对个对象。

    class Washer(): def wash(self): print(self) # 创建海尔洗衣机01号 Haier01 = Washer() Haier01.wash() # <__main__.Washer object at 0x000001A8C23EBE80> # 创建海尔洗衣机02号 Haier02 = Washer() Haier02.wash() # <__main__.Washer object at 0x000001A8C23EB310>

    可以看到,不同对象的地址是不一样的,而且打印出的 self 的地址也在改变(因为 self 永远指向调用该方法(函数)的对象)。

    5. 添加和获取对象属性

    前面已经提到:属性就是特征,比如洗衣机的宽度、高度、颜色等,而对象属性既可以在类外面获取,也能在类里面添加和获取

    image.png

    5.1 添加对象属性

    如何理解添加对象属性呢?

    ​ > 当你买到洗衣机,既定的高度++- 、颜色等属性一方面由工人按照图纸制造出来;另一方面也可以按照自己的意愿进行涂色等修改(虽然大家不会那样做QAQ)。

    5.1.1 类外面添加对象属性

    • 语法
    对象名.属性名 = 值
    • 体验 Haier01.width = 500 # 修改宽度 Haier01.height = 800 # 修改高度

    5.1.2 类外面获取对象属性

    • 语法

      对象名.属性名
      • 体验
      print(f"Haier01洗衣机的宽度是{Haier.width}") print(f"Haier01洗衣机的高度是{Haier.height}")

    5.2 获取对象属性

    如何理解获取对象属性呢?

    洗衣机的高度、颜色等特征信息既体现在图纸中,页可以自己测量所得

    5.2.1 类里面获取对象属性

    • 语法
    self.属性名
    • 体验
    class Washer(): def get_info(self): print(f"洗衣机宽度为{self.width}") print(f"洗衣机的高度为{self.height}") Haier = Washer() Haier.width = 300 Haier.height = 400 Haier.get_info() # 洗衣机宽度为300 洗衣机的高度为400

    6. 魔法方法

    所谓魔法方法,也称为魔法函数(Magic Methods),是Python的一种高级语法,允许你在类中自定义函数(函数名格式一般为xx),并绑定到类的特殊方法中。比如在类A中自定义str()函数,则在调用str(A())时,会自动调用str( ) 函数,并返回相应的结果。

    一言以蔽之, xx 叫做魔法方法,指的是具有特殊功能的函数。

    6.1 魔法方法一览

    image.png

    6.2 魔法方法初识

    魔法方法其实就相当于洗衣机中与生俱来的属性,在生产过程中赋予了这些属性,类比于洗衣机说明书中介绍的各种模式。

    image.png

    6.2.1 init( )

    init ( ) 方法的作用:初始化对象

    class Washer(): # 定义 __init__, 添加实例属性 def __init__(self, width, color, height): # 添加实例属性 self.color = "white" self.width = width self.height = height def get_color(self): # 在类中调用实例属性 print(f"洗衣机颜色为:{self.color}") def get_shape(self): print(f"洗衣机的宽度为:{self.width}, 高度为:{self.height}") Haier01 = Washer() # 实例化一个洗衣机对象(不传参数) Haier01.get_color() # 洗衣机颜色为:white Haier02 = Washer(width=300, height=400) # 传入参数 Haier02.get_shape() # 洗衣机的宽度为:300, 洗衣机的宽度为:400

    注意:

    • init( )方法,在创建对象时默认自动调用

    • init(self) 中的 self 参数,不需要开发者传递, python解释器会自动把当前对象引用传递过去

    6.2.2 str( )

    当print输出对象的时候,默认打印对象的内存地址。而如果类中定义了 str 方法,那么就会打印从这个方法中 return的数据。

    举个栗子:

    class Washer(): def __init__(self, width): self.width = width def __str__(self): return "产品使用说明书" Haier = Washer(400) print(Haier) # 产品使用说明书

    可以看到最终打印的结果并非 width属性,而是返回了 _str下的文字, str ( ) 方法中的文字多为类的介绍

    6.2.3 del( )

    当删除对象时候,python解释器默认调用 del( ) 方法

    同样的,举个栗子:

    class Washer(): def __init__(self, width): self.width = width def __del__(self): print(f"{self}这个对象已经删除!") Haier = Washer(400) del Haier # <__main__.Washer object at 0x000001A8C23EB5E0>这个对象已经删除!

    好啦,本次关于python中面向对象的知识就先介绍到这儿了,还会持续更新~

    上一篇:最长公共连续子串
    下一篇:没有了
    网友评论