《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情




一切皆对象

阅读:227568097    分享到

Python 的哲学是一切皆对象,这是什么意思呢?就是说 Python 中所有的东西都是对象,比如 int 值,float 值,str 值,bool 值,list 值,tuple 值,dict 值,set 值,None, 当然也包含我们自己定义类的对象。大家可能会说明明 int 值是 int 类型,float 值是 float 类型,str 值是 str 类型,bool 值是 bool 类型,list 值是 list 类型,dict 值是 dict 类型,set 值是 set 类型,None 是 NoneType 类型,自定义对象当然是自定义类的类型了。在此我告诉大家其实 Python 中的内置的这些数据类型本身就是用类实现的,比如 int 是 class int 来实现的,float 是 class float 来实现的等等。

在此我再告诉大家一个秘密:Python 中的内置数据类型和我们自定义的类本身也是个对象(不要惊讶) 甚至函数也是对象(再说一遍不要惊讶)。 我的意思是说:Python 内置的所有类型(int,float, list,tuple,dict,set,NoneType) 和我们自定义的类以及函数都是对象。

我们本节课学习两个函数 isinstance 和 type。

isinstance 函数

我们用 isinstance 函数可以判断一个东西的本质是什么,下面我们就来验证在 Python 中一切皆对象。

def func():
    pass

class Test():
    pass

print(isinstance(1, object))
print(isinstance(1.1, object))
print(isinstance("hello", object))
print(isinstance(False, object))
print(isinstance([1], object))
print(isinstance((1,), object))
print(isinstance({1: 1}, object))
print(isinstance(set([1]), object))
print(isinstance(None, object))
print(isinstance(Test(), object))

print(isinstance(int, object))
print(isinstance(float, object))
print(isinstance(str, object))
print(isinstance(bool, object))
print(isinstance(list, object))
print(isinstance(tuple, object))
print(isinstance(dict, object))
print(isinstance(set, object))
print(isinstance(type(None), object))
print(isinstance(Test, object))
print(isinstance(func, object))

我们知道 isinstance 可以验证一个事物的本质是什么,大家请思考一个有趣的问题:假如我们自定义一个父类 Human 和子类 Woman(Woman类继承 Human 类),我们用 Woman 类定义一个对象 ruhua,我们知道 ruhua 是 Woman 那么请问 ruhua 是不是也是 Human(ruhua 当然也是人了)。所以说子类的对象本质是定义它的类,也是个它所属类的父类。

class Human(object):
    pass

class Woman(Human):
    pass

ruhua = Woman()
print(isinstance(ruhua, Woman))  # True,如花是个女人
print(isinstance(ruhua, Human))  # True,如花当然也是人

type 函数

我们知道 isinstance 函数可以判断一个东西的本质,但是很多时候我们更想知道一个东西具体是属于什么类型, 其实所有的对象(int 值,float 值,str 值,bool 值,list 值,tuple 值,dict 值,set 值,None,我们自己定义类的对象) 都属于直接创建它们的类类型;所有的 python 内置类(int,float, list,tuple,dict,set,NoneType)和自定义类(继承 object) 都属于 type 类型;自定义类(不继承 object)属于 classobj 类型;函数属于 function 类型。 Type 函数可以判断一个东西具体所属的类型,我们通过下面表格来了解。

被判断的东西 解释 例子
int 值 int 值属于 int 类型 type(1) 返回 int
float 值 float 值属于 float 类型 type(1.1) 返回 float
str 值 str 值属于 str 类型 type("hello") 返回 str
bool 值 bool 值属于 bool 类型 type(False) 返回 bool
list 值 list 值属于 list 类型 type([1]) 返回 list
tuple 值 tuple 值属于 tuple 类型 type((1,)) 返回 tuple
dict 值 dict 值属于 dict 类型 type([1]) 返回 dict
set 值 set 值属于 set 类型 type(set([1])) 返回 set
自定义类的对象 对象属于自定义类类型 type(对象) 返回自定义类名
int int 属于 type 类型 type(int) 返回 type
float float 属于 type 类型 type(float) 返回 type
bool bool 属于 type 类型 type(bool) 返回 type
list list 属于 type 类型 type(list) 返回 type
tuple tuple 属于 type 类型 type(tuple) 返回 type
dict dict 属于 type 类型 type(dict) 返回 type
set set 属于 type 类型 type(set) 返回 type
自定义类 类属于 type 类型 type(类) 返回 type
函数 函数 属于 function 类型 type(函数) 返回 function

注意:自定义的类继承 object 和不继承 object 的 type 有差别,为了更好的理解上面的表格,大家运行一下下面的代码。

def func():
    pass

class Test():
    pass

class Myobject(object):
    pass

print(type(1))
print(type(1.1))
print(type("hello"))
print(type(False))
print(type([1]))
print(type((1,)))
print(type({1: 1}))
print(type(set([1])))
print(type(None))
print(type(Myobject()))

print(type(int))
print(type(float))
print(type(str))
print(type(bool))
print(type(list))
print(type(tuple))
print(type(dict))
print(type(set))
print(type(type(None)))
print(type(Myobject))
print(type(func))

本节重要知识点

记住子类的对象也是父类的对象

弄明白 isinstance 和 type 函数。

作业

把上面的程序好好练一练。


如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
winter
2020年5月3日 18:04 回复

博主举的例子给力!


user_image
王政
2020年1月5日 11:22 回复

厉害了,我的哥


user_image
于涛
2019年5月28日 18:34 回复

python牛逼的很呐


user_image
怎么改名字
2019年4月8日 00:56 回复

python连数据类型都是对象