Python黑魔法揭秘:为什么说“万物皆对象”?

你好呀,Python爱好者! 你是否曾听大佬们说“Python里连数字都是对象”? 今天,我们就来聊聊这个让新手懵圈、老手直呼内行的 “一切皆对象” 哲学!

一、一个让新手怀疑人生的例子

先看这段代码:

a = 5
b = 5
print(a is b)  # 输出啥?True还是False?

答案:True!
惊不惊喜?连数字5都不是“值”,而是内存中的某个神秘对象!这背后的秘密,正是Python的对象模型

二、解剖Python对象:身份证、户口本和肉身

Python中每个数据(是的,每一个!)都是对象,自带三大“基因”:

  1. 身份证号:id(obj),代表对象的内存地址,独一无二!
  2. 户口类型:type(obj),决定对象能干啥(如int会加减乘除)。
  3. 肉身数据:对象存储的具体值,比如5或"hello"。

举个栗子:

s = "信息科技云课堂"
print(id(s))        # 输出一串神秘数字:对象的“家门牌号”
print(type(s))      # <class 'str'>,原来是字符串家族!
print(s.upper())    # "码农人生"变身大写?错!中文表示不背这锅

三、变量?只是对象的“快捷方式”!

重要结论:变量不是“盒子”,而是对象的“贴纸”!

  • 执行a = 1000时,Python在内存中创建了一个int对象,然后给这个对象贴上了a的标签。
  • 再执行b = a,不过是把同一张对象贴纸复制给了b!
a = 1000
b = a
print(id(a) == id(b))  # True,贴纸指向同一个对象!

四、颠覆认知:这些居然全是对象!

你以为只有数字和字符串?格局打开!
函数是对象:能当参数传递、能赋值给变量!
是对象:类本身是type类的实例(元类黑魔法的基础)
模块是对象:import numpy后,numpy也是个对象!
None是对象:它是NoneType家的独苗!

def 唱首歌():
    print(" 爱你孤身走暗巷~")

唱歌 = 唱首歌
唱歌()  # 输出歌声!函数对象被“转手”了

print(type(int))  # <class 'type'>,int类竟是type类的孩子!

五、对象分两种:钢铁直男与变形金刚

o 钢铁直男(不可变对象)int, str, tuple
试图修改?不!直接造个新对象。

a = 5
a += 1  # 新对象诞生,旧对象原地去世(可能)

o 变形金刚(可变对象)list, dict
原地变身,内存地址不变!

lst = [1, 2]
lst.append(3)  # 还是那个lst,但内涵变了!

六、灵魂拷问区

  1. 为什么a = 257; b = 257时a is b可能是False?
  2. 如何让函数“记住”上次调用的状态?(提示:可变对象妙用)
  3. (评论区等你提问!)

七、为什么关心“万物皆对象”?

o 写代码更高效:理解可变/不可变对象,避免Bug坑!
o 装X必备:面试时侃晕面试官!
o 掌握高阶玩法:装饰器、元类…这些骚操作全基于对象模型!

挑战任务

在Python中运行这段代码,并思考为什么?

a = "hello"
b = "hello"
print(a is b)  # 输出True还是False?

相关文章

太好用!教你几招Python魔法方法的妙用

专注Python、AI、大数据,请关注公众号七步编程!Python是一种简单的编程语言,满足一个需求,可以有各种各样的实现方法。正是因为它可以通过各种串联满足很多复杂的逻辑,因此,对代码可读性关注度不...

11 每个程序员都应该知道的 Python 魔法方法

在 Python 中,魔法方法帮助你模拟 Python 类中内置函数的行为。这些方法有前后双下划线(__),因此也被称为魔法方法 。这些魔法方法也帮助你实现 Python 中的运算符重载。你很可能见...

Python中关于魔法方法、单例模式的知识

目录:init,del,add,str和 repr,call,单例模式,class,dict,doc,bases,mro魔法方法:定义:在特定条件下,触发方法在python里面很多以双下划线开头且结尾...

掌握Python的&quot;魔法&quot;:特殊方法与属性完全指南

在Python的世界里,以双下划线开头和结尾的"魔法成员"(如__init__、__str__)是面向对象编程的核心。它们赋予开发者定制类行为的超能力,让自定义对象像内置类型一样优雅工...

Python 魔法方法的工作原理:实用指南(三)

以前的文章我们讲了python中对象表示、运算符等魔法方法的用法,下面我们继续深入探索容器、资源管理、性能方面的魔法方法。容器方法(类似列表、字典对象)当你需要自定义存储和检索数据的对象时,此方式可以...

Python进阶——如何正确使用魔法方法?(上)

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在做 Python 开发时,我们经常会遇到以双下划线开头和结尾的方法,例如 __init__、_...