python一切皆对象的理解_python中的一切皆对象

1、函数和类是对象,是Python中的一级公民

(1)将函数和类赋值给一个变量

将函数或类赋值给一个变量,就可以把该变量当成函数或类来使用

1 defask(name):2 print(name)3 classPerson:4 def __init__(self):5 print("hello bobby")6 print("-----函数赋值给变量-------")7 my_func =ask8 #变量当成函数使用

9 my_func("bobby")10 print("---------类赋值给变量-----")11 my_class =Person12 #变量当成类使用

13 #类实例化即会调用初始化函数

14 my_class()

(2)可以将对象(函数和类)添加到集合对象中

def ask(name="bobby"):print(name)classPerson:def __init__(self):print("hello bobby")print("-----函数和类可以添加到集合对象中去---")

obj_list=[]

obj_list.append(ask)

obj_list.append(Person)for item inobj_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("-----函数可以返回一个函数---")defdecorator_func():print("我是一个函数")returnask

my_ask=decorator_func()

my_ask("Tom")‘‘‘输出结果

我是一个函数

Tom‘‘‘

(4)函数和类可以作为参数传递给函数

def ask(name="bobby"):print("传递一个函数")classPerson:def __init__(self):print("传递一个类")print("---函数和类可以作为参数传递给函数---")defchuandi(content):

content()#传递函数

chuandi(ask)#传递类

chuandi(Person)‘‘‘输出结果

传递一个函数

传递一个类‘‘‘

(5)函数和类可以当作函数的返回值

def ask(name="bobby"):print(name)classPerson:def __init__(self):print("返回一个类")print("-----函数可以返回一个函数和类---")defdecorator_func():print("我是一个函数")returnask

my_ask=decorator_func()

my_ask("返回一个函数")defdecorator_func1():print("我是一个函数")returnPerson

my_person=decorator_func1()

my_person()‘‘‘输出结果

我是一个函数

返回一个函数

我是一个函数

返回一个类‘‘‘

2、type、object和class的关系

(1)type->class->obj

类(class)是由type类生成的一个对象,平时所熟悉的对象obj是由类(class)对象创建的一个对象

type两种用法:一,生成一个类;二,返回一个对象的类型

(1.1)返回对象的类型

20190413151433683824.png

1是一个int类的对象,类本身也是一个对象,由type(int)知,int是type类的对象,因此生成过程是type->int->1

20190413151433879124.png

abc是str类的对象,类本身也是一个对象,由type(str)知,str是type类的对象,因此生成过程是type->str->abc

20190413151433981656.png

自己创建的类也符合该逻辑,type生成类对象(内置的类或自定义的类),类对象产生实例

(2)object是所有类都要继承的最顶层的一个基础类

__base__查看类的基类

20190413151434008022.png

(3)type也是一个类,同时type也是一个对象

type的基类也是object

20190413151434106648.png

object是所有类的基类,类同时也是对象,由type(object)知object是由type生成的

20190413151434190627.png

object之上,没有基类

20190413151434280465.png

(4)type、class、object关系图

20190413151434358585.png

(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创建的,包括它自己

原文地址:https://www.cnblogs.com/slfh/p/10701149.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值