• 【面向对象】【0x00】 Python面向对象介绍


    一、类和对象

    1.1 类和对象的区别与联系

    类是模具,对象是实体。
    举个例子:人是类,某个具体的人是对象。 王五就是一个对象,王五是一个人,但人却不是王五。
    类的抽象层次更高,人这个类,拥有人的所有通用属性和行为。
    记住,面向对象编程,就是在设计某些类的属性、行为。

    1.2 Python中的OOP体现

    Python中所有的东西都是对象。
    在其他语言中,基本数据类型不是对象,而是值。但在Python里,基本数据类型也是对象。

    二、面向对象编程和面向过程编程的区别

    2.1 面向过程编程思想

    面向过程思想,个人理解:程序=数据结构+算法的体现。即,写这段代码的程序员是一个具体的执行者,所有的事情都要自己干。
    比如,在编写冰箱程序时,要想冰箱门具体应该怎么打开,旋转多大的角度?旋转的角度过大怎么处理?怎么制冷?用什么公式计算?

    2.2 面向对象编程思想

    面向对象编程时,写这段代码的程序员不再是执行者,而是一个调度者。
    比如,编写冰箱程序时,先想想有什么对象?怎么装东西:让冰箱把门打开,装进去,让冰箱把门关上。 具体怎么关的?写这段代码的程序员不知道,冰箱自己最清楚。

    2.3 这两种编程思想最本质的区别

    程序员从一个执行者变为了一个调度者,这更符合人类的思维方式,因此适用于构建大型的软件系统。
    你在现实中生病了,会去学习医术吗?不会的。你会去找大夫,具体怎么治病,那是大夫的事。
    你在现实中电视机坏了,你会去学习电视机的原理吗?不会的。你会去找维修工。具体怎么修,那是维修工的事。

    但是,代码真的少写了吗?要具体情况具体分析。如果你写的代码,类都需要重新实现,那写的代码并没有少。如果这个世界上没有人懂医术,总要有人先学习医术,你才能去找他看病。
    而且,面向对象编程要对队友极度的信任。因为你只是在调用别人写的类,你是调度者,这个类不是你写的,你无法保证这段代码没有bug。

    三、Python中定义类、创建对象

    定义类代码:

    class Demo:
        pass
    
    • 1
    • 2

    Python中的类名应该是大驼峰(即每个单词的首字母都大写)的。这并不强制,但是一种规范。
    也许你听过新式类和经典类的概念。但Python3中都是新式类。

    实例化(创建)对象代码:

    class Demo:
        pass
    d = Demo()
    
    • 1
    • 2
    • 3

    四、类中都有什么?

    首先,我们来打印一下类:

    class Money:
        pass
    print(Money)
    
    • 1
    • 2
    • 3

    输出:

    <class '__main__.Money'>
    
    • 1

    我们看到一个奇怪的字符串,看上去是一个类,标识了这个类的名称。来验证下:

    class Money:
        pass
    print(Money)
    print(Money.__name__)
    
    • 1
    • 2
    • 3
    • 4

    输出:

    <class '__main__.Money'>
    Money
    
    • 1
    • 2

    看上去没错的。

    4.1 类定义的时候都干了什么事儿?

    Python开辟了一片内存空间用于存储类。这片存储空间会返回一个唯一标识(可以认为是一个地址)给以类名命名的这个变量。
    内存图大概是这样的:
    在这里插入图片描述
    即,是先开辟了一片内存空间存储类,然后把这个类的唯一标识跟Money这个变量进行了绑定,所以我们可以通过Money这个变量来操作类。

    五、实例化时干了什么事?

    class Money:
        pass
    d = Money()
    print(Money)
    print(d.__class__)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出:

    <class '__main__.Money'>
    <class '__main__.Money'>
    
    • 1
    • 2

    首先,对类进行实例化时,会开辟一片内存空间用来存储对象。这个对象中有一个__class__属性,指向创建它的类。然后,这片内存空间也会返回一个唯一标识,在这个例子中,存储这个唯一标识的变量是one. 我们通过one即可操作对象。
    此时,内存图大概长这样:
    在这里插入图片描述

  • 相关阅读:
    你了解Java中的并发编程吗?
    Java.lang.Class类 getResource()方法有什么功能呢?
    14.ElasticSearch系列之分布式特性及分布式搜索机制(三)
    Elasticsearch实现全文搜索的步骤和实现原理
    c++ 内存顺序
    一文学会设计模式
    单元测试Testng
    Android studio的Bumblebee版本Gradle7.2降到Gradle4.2.0详细步骤记录(项目已上传)
    微信小程序运行机制和生命周期
    Windows-docker集成SRS服务器的部署和使用
  • 原文地址:https://blog.csdn.net/weixin_41687289/article/details/126554722