• (Python高级编程)第一章:Python面向对象深刻认识


    一:Python是一门彻底的面向对象语言

    总的来说,Java和Python各自都是一门纯面向对象语言,但是Python要比Java的面向对象更加彻底,这也直接导致Python具有很强的灵活性

    • 动态语言和静态语言的区别就体现在面向对象是否彻底

    在Python中,函数和类也是对象(第三章会重点讲解),是Pthon的“一等公民”,具体表现为

    • 可以赋值给一个变量
    • 可以添加到集合对象
    • 可以作为参数传递给函数(这也就是为什么Python中函数可以作为参数)
    • 可以作为函数的返回值(这也就是为什么Python中函数的返回值也可以是函数)

    例如

    def test(x=1):
        return x**2
    
    class Test:
        def __init__(self):
            print("Class is being instantiated")
    
    
    #  可以赋值给一个变量
    my_func = test
    my_class = Test
    print(my_func(10))
    my_class()
    print("-"*20)
    
    #  可以添加到集合对象中
    list1 = [test, Test]
    for i in list1:
        print(i())
    print("-"*20)
    
    #  可以作为函数的返回值
    
    def decorator_test():
        print("decorator_test running now!")
        return test  # 注意这里不要写test()等形式,因为这样不是返回对象地址,而是调用
    my_test = decorator_test()
    print(my_test(2))
    print("-"*20)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    二:type、object和class

    (1)type-元类

    在Python中,type()函数的使用此时也是比较多的,主要用它来判断一个对象的类型,如下

    class Student:
        pass
    
    a = [1, 2, 3]
    b ={'2': "sad", 'c': a, 'b': 123}
    student = Student()
    print(type(1))
    print(type("test"))
    print(type(a))
    print(type(b))
    print(type(student))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    上面我们说过,Python中一切皆对象。这意味着类也是对象,当然这听起来有些怪怪的,但事实确实如此。Python中的intstrdict等都是对象,甚至你所常见的Student类也是对象,他们本质都是type类实例化后的对象,这个type我们称其为元类

    如下是Python中关于type类的定义

    在这里插入图片描述

    即然type是一个类,那么如type(int)type(list)等操作其实就是在创建类

    • 类本身不过是一个名为 type 类的实例。在 Python世界中,type 这个类就是造物的上帝
    • 用户自定义类,只不过是 type 类的__call__运算符重载
    class Student:
        pass
    
    print(type(list))
    print(type(int))
    print(type(set))
    print(type(Student))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    (2)object

    和Java一样,在Python中,object类是所有类的基类,其他所有类都继承自基类 不过需要注意:

    • type也是类,所以 type的基类也是object
    • 虽然object是基类,但是在Python类也是对象,所以 object也是type类型
    print(int.__base__)  # 查看基类
    print(object.__base__)
    print(type.__base__)
    print(type(object))
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (3)type、object和class的关系

    object和class的关系是非常容易理解的,这里面最难理解的就是typeobject的关系,而且这涉及了后续元编程相关内容

    • type是所有对象(甚至是自己)的“造物主”
    • 像list、str这些类型被视为对象之后,这意味着它的修改是极其方便的。而不像C++/Java那样,在程序运行时,类已经被编译好了,所以修改起来十分复杂

    在这里插入图片描述

    三:Python内置类型

    (1)对象的三个特征

    一个对象具有如下三个特征

    • 身份:也即地址,是该对象在内存中存放的地址。可以通过函数id(object)获取
    • 类型:例如intstrdict

    (2)Python中常见的内置类型

    ①:NonePython解释器启动时会自动生成一个None对象,全局只有一个

    • 如下,对象ab被赋值为了None,由于None全局只有一个,所以ab的地址是相同的
    a = None
    b = None
    if id(a) == id(b):
        print("a和b地址相同")
    else:
        print("a和b地址不相同")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    ②:数值类型

    • int
    • float
    • complex
    • bool

    ③:迭代类型

    • 迭代器部分详细介绍

    ④:序列类型

    • list
    • bytesbytearraymemoryview
    • range
    • tuple
    • str
    • array

    ⑤:映射(dict

    ⑥:集合

    • set
    • frozenset

    ⑦:上下文管理类型(with

    ⑧:其他

    • 模块类型
    • class和实例
    • 函数类型
    • 方法类型
    • 代码类型
    • object对象
    • type类型
    • ellipsis类型
    • notimplemented类对象
  • 相关阅读:
    南京--ChatGPT/GPT4 科研实践应用
    浅谈兼容性测试的关键步骤
    基于qt的图书管理系统----04sql功能开发
    删除 Windows Server IIS 10 和 ASP.NET 中的 HTTP 响应标头
    OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(6)扩写 / Expanding
    图片编辑器tui-image-editor
    对话PostgreSQL作者Bruce:“转行”是为了更好地前行
    AI在工业机器人系统中的应用
    centos6.5 搭建FTP服务器
    springboot高版本默认不支持循环依赖
  • 原文地址:https://blog.csdn.net/qq_39183034/article/details/126784868