zoukankan      html  css  js  c++  java
  • 彻底搞懂Python一切皆对象,面试必过

    前言

    犹记得当初学习Python的时候,对于Python一切皆对象很是懵逼,因为Python是面向对象的动态型语言,而在函数及高阶函数的应用中,如若对于一切皆对象不是有很透彻的了解,基础不是那么牢固的话,那么对于今后的Python进阶而言,就有点拖后腿了,鉴于有朋友跟我联系说,对于一切皆对象掌握的不是太牢固,那么, 木子的本篇博客就对此知识点进行概括总结。 如有不当之处,还望各位大佬指正。


    简述

    长话短说,本文主要针对Python一切皆对象来讨论,主要从以下两个方面来论述:

    Python的一等公民

    type、object和class的关系

    对于Python的常见内置类型,本篇就不做详细阐述
    这里要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

    内置类型: None(全局只有一个) 数值类型:int、float、complax(复数)、bool 迭代类型 序列类型:list、bytes、range、tuple、str、array 映射类型:dict 集合类型:set、frozenset 上下文管理类型:with


    Python的一等公民

    何为一等公民?

    • 可以赋值给一个变量
    • 可以添加到集合对象中
    • 可以作为参数传递给函数
    • 可以当做函数的返回值

    针对赋值给变量及添加到集合对象中,代码予以展示:

    def func(name='Python'):
        print(f'the func is {name}')
    
    
    class Test:
        def __init__(self):
            print(f'the class is {Test.__name__}')
    
    obj_list = []
    obj_list.append(func)
    obj_list.append(Test)
    
    for item in obj_list:							# 添加至集合对象中
        print(item())
    复制代码

    那么上述例子,代码运行结果如下:

    the func is Python								# 函数func运行,打印结果
    None											# 函数func因没有return,返回None
    the class is Test								# 类Test运行,打印结果
    <__main__.Test object at 0x0000024AB34526A0>	# 类Test运行,因没有返回值,调用item(),返回类Test的对象
    复制代码

    那么对于可以作为参数传递,以下代码展示:

    def func(name='Python'):
        print(f'the func is {name}')
    
    def decorator_func():
        print(f'the decorator_func is running')
        return func									# 返回函数func
    
    my_test = decorator_func()
    my_test('木子的三维世界')						# 传递参数,调用func
    复制代码

    上述代码运行结果如下:

    the decorator_func is running
    the func is 木子的三维世界
    复制代码

    type、object和class的关系

    上面的代码是演示何为Python的一等公民,那么对于为什么Python一切皆对象,想必有些道友还是有点不太懂,那么重点来了,了解完type、object和class后,木子觉得大家应该就可以彻底hold住了。 为便于理解,代码予以展示:

    # 示例如下
    a=2019
    b="一切皆对象"
    print(type(2019))
    print(type(int))
    print(type(b))
    print(type(str))
    
    class Student:
        pass
    
    stu = Student()
    print(type(stu))
    print(type(Student))
    print(int.__bases__)
    print(str.__bases__)
    print(Student.__bases__)
    print(type.__bases__)
    print(object.__bases__)
    print(type(object))
    print(type(type))
    复制代码

    上面代码,运行结果如下:

    <class 'int'>									# 2019是由int这个类创建的实例
    <class 'type'>									# int这个类是由type这个类创建的实例
    <class 'str'>									# 同上
    <class 'type'>								
    <class '__main__.Student'>						# stu是类Student创建的实例
    <class 'type'>									# 类Student是由type这个类创建的实例
    (<class 'object'>,)								# 类int的基类是object这个类
    (<class 'object'>,)								# 同上
    (<class 'object'>,)								# 同上
    (<class 'object'>,)								# 重点:类type的基类也是object这个基类
    ()												# 重点:类object没有基类
    <class 'type'>									# 难点:类object是由类type创建的实例
    <class 'type'>									# 难点:类type是由type类自身创建的实例
    复制代码

    对于上面的代码,我们可以得出以下结论:

    1. 类type产生int实例,类int又有了2019这样的实例
    2. 类object是最顶层的基类
    3. type也是一个类,同时也是一个对象

    想必有些道友,看到上面的代码,已经有点懵逼了。请看下图:

    type、object和class的关系图

    对于上面图片的解读如下:

    1. object是一切对象:list、str、dict、tuple的基类,同时object是type的实例
    2. 类type是自身的实例,同时type也继承自object类
    3. 由结论1和结论2,得出一切皆对象,同时一切皆继承自object类

    总结注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

     

    Python一切皆对象对于函数式编程,以及Python各种高阶用法有很大帮助。 如果哪位道友还不是很清楚,那么多看看上面的图片,没事儿多看看,多看看不坏事儿。。。好了,话又开始多了

    那么想必各位道友看到这里,已经对于Python一切皆对象有了比较清的认知,后续木子会更新一篇关于Python元类的博客,今天也算是做个铺垫。

    备注:为何type类可以自身的实例,有兴趣的道友可以了解下指针的概念。

    本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

  • 相关阅读:
    [剑指offer] 7. 斐波那契数列
    [剑指offer] 6. 旋转数组的最小数字
    [剑指offer] 5. 用两个栈实现队列
    [剑指offer] 4. 重建二叉树
    [剑指offer] 3. 从头到尾打印链表
    vue.js从输入中的contenteditable元素获取innerhtml
    CSS3 ------- object-fit属性
    mouseenter和mouseover区别
    元素scroll系列属性
    淘宝flexible.js源码分析
  • 原文地址:https://www.cnblogs.com/chengxuyuanaa/p/12788034.html
Copyright © 2011-2022 走看看