Python中一切皆对象
2022/4/22 22:43:01
本文主要是介绍Python中一切皆对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
对象的三个特征
-
身份
身份可以理解成在内存中的地址,可以通过id()函数查看某一个对象的身份,因为对象是分配在内存中的。相当于指针指向对象
-
类型
int 、str等等
-
值
Python的一切皆对象
- 首先,对象应该是某个类型的实例,也就是模板刻出来的模型,也就是说Python中所有对象都是“实例”都有相对应“类”
- 其次,对象应该在内存中有一块区域用于存放它的地址
- 最后,对象应该有具体的值
函数和类也是对象
- 赋值给一个变量
- 可以添加到集合对象当中
- 可以作为参数传递给函数
- 可以当函数的返回值
注:
-
函数不加括号赋值给变量,叫引用,两者地址相同。加了括号(成了调用)赋值给变量,那是将调用结果给变量,此时两者的地址是不同的
-
Python的类,带括号是实例化,不带括号是赋值。带括号的type是定义的类,不带括号type类型是type
可调用对象
- 可调用对象的定义
调用运算符()后并执行,这就是可调用对象。如果想要判断对象是否可以调用,可以使用内置函数callable()函数。 - 七种可调用对象
- 用户定义的函数
使用def语句或者lambda表达式创建 - 内置函数
使用 C 语言(CPython)实现的函数,如 len 或 time.strftime。
3.内置方法
使用 C 语言实现的方法,如 dict.get。 - 方法
在类的定义体中定义的函数。 - 类
调用类时会运行类的 new 方法创建一个实例,然后运行 init 方法,初始 化实例,最后把实例返回给调用方。因为 Python 没有 new 运算符,所以调用类相当于调 用函数。(通 常,调用类会创建那个类的实例,不过覆盖 new 方法的话,也可能出 现其他行为。) - 类的实例
如果类定义了 call 方法,那么它的实例可以作为函数调用。对实例x来说,x(args)等价于x.__call __(args) - 生成器函数
使用 yield 关键字的函数或方法。调用生成器函数返回的是生成器对象。
- 用户定义的函数
type、object和class的关系
- list、str、dict、tuple、type都继承了object,所以object是最顶层的基类
- type是本身的对象(实例),object、list、str、dict、tuple都是type的对象,所以type创建了所有的对象
- 综合下来,一切皆对象的同时,又继承了object类,这就是Python的灵活之处
-
实例
# Python中一切皆对象 a=1 b='abc' c=[] d=dict() e=(1,2,3) # 函数可以赋值给一个变量 def ask(name='sixkery'): print(name) def sing(name='ge'): print(name) class Person(): def __init__(self): print("sixkery1") def decorator_fubc(): # 装饰器的原理就来自这里的 print('dec start') return ask if __name__=="__main__": my_func = ask # 函数赋给变量 my_func() # 把函数当变量来使用 si=sing() p=Person() de=decorator_fubc() de() de1=decorator_fubc print("类型:{},地址:{}".format(type(a),id(a))) print("类型:{},地址:{}".format(type(b), id(b))) print("类型:{},地址:{}".format(type(c), id(c))) print("类型:{},地址:{}".format(type(d), id(d))) print("类型:{},地址:{}".format(type(e), id(e))) print("my_func类型:{},地址:{}".format(type(my_func), id(my_func))) print("ask函数的类型:{},地址:{}".format(type(ask), id(ask))) print("p的类型:{},地址:{}".format(type(p), id(p))) print("Person类的类型:{},地址:{}".format(type(Person), id(Person))) print("类型:{},地址:{}".format(type(de), id(de))) print("类型:{},地址:{}".format(type(de1), id(de1))) print("类型:{},地址:{}".format(type(si), id(si))) print("int类型:{},地址:{}".format(type(int), id(int))) # 结果为: sixkery ge sixkery1 dec start sixkery 类型:<class 'int'>,地址:4366494000 类型:<class 'str'>,地址:4367454448 类型:<class 'list'>,地址:4374146304 类型:<class 'dict'>,地址:4374199616 类型:<class 'tuple'>,地址:4374064576 my_func类型:<class 'function'>,地址:4367085776 ask函数的类型:<class 'function'>,地址:4367085776 p的类型:<class '__main__.Person'>,地址:4374216608 Person类的类型:<class 'type'>,地址:4964107424 类型:<class 'function'>,地址:4367085776 类型:<class 'function'>,地址:4374194064 类型:<class 'NoneType'>,地址:4372481136 int类型:<class 'type'>,地址:4383786008
这篇关于Python中一切皆对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享