python中的一切皆对象
Posted SLFH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的一切皆对象相关的知识,希望对你有一定的参考价值。
1、函数和类是对象,是Python中的一级公民
(1)将函数和类赋值给一个变量
将函数或类赋值给一个变量,就可以把该变量当成函数或类来使用
1 def ask(name): 2 print(name) 3 class Person: 4 def __init__(self): 5 print("hello bobby") 6 print("-----函数赋值给变量-------") 7 my_func = ask 8 # 变量当成函数使用 9 my_func("bobby") 10 print("---------类赋值给变量-----") 11 my_class = Person 12 # 变量当成类使用 13 # 类实例化即会调用初始化函数 14 my_class()
(2)可以将对象(函数和类)添加到集合对象中
def ask(name="bobby"): print(name) class Person: def __init__(self): print("hello bobby") print("-----函数和类可以添加到集合对象中去---") obj_list = [] obj_list.append(ask) obj_list.append(Person) for item in obj_list: #打印函数和类中的东西,并且打印它们返回的东西 print(item()) \'\'\' 输出结果 bobby None---ask()函数没有返回值,故函数返回None hello bobby <__main__.Person object at 0x0219F8D0>-----类的返回(实际是init函数的返回),Person()实例化后返回一个对象(函数返回对象) \'\'\'
(3)补充实例:函数可以返回None,可以返回一个对象,也可以返回一个函数(装饰器实现原理)
def ask(name="bobby"): print(name) print("-----函数可以返回一个函数---") def decorator_func(): print("我是一个函数") return ask my_ask = decorator_func() my_ask("Tom") \'\'\' 输出结果 我是一个函数 Tom \'\'\'
(4)函数和类可以作为参数传递给函数
def ask(name="bobby"): print("传递一个函数") class Person: def __init__(self): print("传递一个类") print("---函数和类可以作为参数传递给函数---") def chuandi(content): content() # 传递函数 chuandi(ask) # 传递类 chuandi(Person) \'\'\' 输出结果 传递一个函数 传递一个类 \'\'\'
(5)函数和类可以当作函数的返回值
def ask(name="bobby"): print(name) class Person: def __init__(self): print("返回一个类") print("-----函数可以返回一个函数和类---") def decorator_func(): print("我是一个函数") return ask my_ask = decorator_func() my_ask("返回一个函数") def decorator_func1(): print("我是一个函数") return Person my_person = decorator_func1() my_person() \'\'\' 输出结果 我是一个函数 返回一个函数 我是一个函数 返回一个类 \'\'\'
2、type、object和class的关系
(1)type->class->obj
类(class)是由type类生成的一个对象,平时所熟悉的对象obj是由类(class)对象创建的一个对象
type两种用法:一,生成一个类;二,返回一个对象的类型
(1.1)返回对象的类型
1是一个int类的对象,类本身也是一个对象,由type(int)知,int是type类的对象,因此生成过程是type->int->1
abc是str类的对象,类本身也是一个对象,由type(str)知,str是type类的对象,因此生成过程是type->str->abc
自己创建的类也符合该逻辑,type生成类对象(内置的类或自定义的类),类对象产生实例
(2)object是所有类都要继承的最顶层的一个基础类
__base__查看类的基类
(3)type也是一个类,同时type也是一个对象
type的基类也是object
object是所有类的基类,类同时也是对象,由type(object)知object是由type生成的
object之上,没有基类
(4)type、class、object关系图
(4.1)内部类以及自定义类默认继承object,object是所有类的一个基类,type也继承它
(4.2)object是type的实例,list等所有的内置类和自定义类都是由type创建的,type创建了所有对象(函数和类等)。如,list是一个类,它也是一个对象的原因在于,它是由type创建的,所以类也是对象(设计原因:类加载到内存后不能修改,而对象则能随时修改,比较方便)
(4.3)object是type的实例,type继承了object,type也是type自身的实例,其他都是type的实例,故一切皆对象
object是所有类的基类,所有的类最终往上追溯都继承它,object继承为空
type既是一个类又是一个对象,所有的类往上追溯都是由type创建的,包括它自己
以上是关于python中的一切皆对象的主要内容,如果未能解决你的问题,请参考以下文章