Python小世界:彻底搞懂Python一切皆对象!!!
前言
犹记得当初学习Python的时候,对于Python一切皆对象很是懵逼,因为Python是面向对象的动态型语言,而在函数及高阶函数的应用中,如若对于一切皆对象不是有很透彻的了解,基础不是那么牢固的话,那么对于今后的Python进阶而言,就有点拖后腿了,鉴于有朋友跟我联系说,对于一切皆对象掌握的不是太牢固,那么, 木子的本篇博客就对此知识点进行概括总结。
如有不当之处,还望各位大佬指正。
简述
长话短说,本文主要针对Python一切皆对象来讨论,主要从以下两个方面来论述:
Python的一等公民
type、object和class的关系
对于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类自身创建的实例
对于上面的代码,我们可以得出以下结论:
- 类type产生int实例,类int又有了2019这样的实例
- 类object是最顶层的基类
- type也是一个类,同时也是一个对象
想必有些道友,看到上面的代码,已经有点懵逼了。请看下图:

对于上面图片的解读如下:
- object是一切对象:list、str、dict、tuple的基类,同时object是type的实例
- 类type是自身的实例,同时type也继承自object类
- 由结论1和结论2,得出一切皆对象,同时一切皆继承自object类
总结
Python一切皆对象对于函数式编程,以及Python各种高阶用法有很大帮助。
如果哪位道友还不是很清楚,那么多看看上面的图片,没事儿多看看,多看看不坏事儿。。。好了,话又开始多了
那么想必各位道友看到这里,已经对于Python一切皆对象有了比较清的认知,后续木子会更新一篇关于Python元类的博客,今天也算是做个铺垫。
备注:为何type类可以自身的实例,有兴趣的道友可以了解下指针的概念。
时候不早了,睡觉睡觉,明天周一上班。。。
Python小世界:彻底搞懂Python一切皆对象!!!的更多相关文章
- java线程间通信:一个小Demo完全搞懂
版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...
- 一文搞懂 Python 的模块和包,在实战中的最佳实践
最近公司有个项目,我需要写个小爬虫,将爬取到的数据进行统计分析.首先确定用 Python 写,其次不想用 Scrapy,因为要爬取的数据量和频率都不高,没必要上爬虫框架.于是,就自己搭了一个项目,通过 ...
- Python小世界:匿名函数、高阶函数、推导式
前言 木子本人搞起Python已有多年,一直觉得什么都会,但是有时候实操起来,才觉得很多底层基础的知识都没有彻底的灵活掌握. 另外,网上关于Python基础知识的各种普及已有太多太多. 附上相关大神的 ...
- 一文搞懂Python迭代器和生成器
很多童鞋搞不懂python迭代器和生成器到底是什么?它们之间又有什么样的关系? 这篇文章就是要用最简单的方式让你理解Python迭代器和生成器! 1.迭代器和迭代过程 维基百科解释道: 在Python ...
- 搞懂Python的类和对象名称空间
代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 ...
- 一文搞懂Python Unittest测试方法执行顺序
大家好~我是米洛! 欢迎关注我的公众号测试开发坑货,一起交流!点赞收藏关注,不迷路. Unittest unittest大家应该都不陌生.它作为一款博主在5-6年前最常用的单元测试框架,现在正被pyt ...
- Python小世界:项目虚拟环境配置的N种方法
前言 和其他大多数现代编程语言一样,Python对包和 模块的下载.存储以及管理有其自己的一套方法.但是当我们同时开发多个项目工程的时候,不同的项目会将第三方的包存放在相同的路径下.这就意味着,如果有 ...
- 彻底搞懂Python切片操作
在利用Python解决各种实际问题的过程中,经常会遇到从某个对象中抽取部分值的情况,切片操作正是专门用于完成这一操作的有力武器.理论上而言,只要条件表达式得当,可以通过单次或多次切片操作实现任 ...
- 一文搞懂Python可迭代、迭代器和生成器的概念
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
随机推荐
- jira与wiki官方文档记录
jira:https://confluence.atlassian.com/display/JIRA/Home wiki:https://confluence.atlassian.com/doc/co ...
- 9--RESTful支持
1.对url进行规范,写RESTful格式的url 非REST的url:http://...../queryItems.action?id=001&type=T01 REST的url风格:ht ...
- hdmap相关单词
交叉口(junction) 交叉口组(junctiongroup)
- LightOJ 1132 Summing up Powers:矩阵快速幂 + 二项式定理
题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意: 给定n.k,求(1K + 2K + 3K + ... + NK) % 2 ...
- C++中的宏和const
在C语言中使用const来定义一个变量,可以通过变量类型的指针形式来进行修改,而C++中增强了这种表现形式,使得即使通过类型变量指针也不能对变量进行修改. 在C++中const和宏是有区别的. con ...
- <<Senium2自动化测试>>读书笔记二
为进一步加强Python知识扩展和学习,在朋友的推荐下选择了<<Selenium2自动化测试实战>>,作者胡志恒,基于Python语言实现,以实例的方式详细讲解WebDrive ...
- ACM学习历程—FZU 2140 Forever 0.5(计算几何 && 构造)
Description Given an integer N, your task is to judge whether there exist N points in the plane su ...
- 【LeetCode】454 4Sum II
题目: Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are su ...
- BZOJ4408:[FJOI2016]神秘数
浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.p ...
- 2010浙大:zoj问题
题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下:1. zoj能AC:2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者 ...