天天看点

Python中object,type,class类的关系

引言

object, type, class(用户自定义的类)三者的关系如图所示,下文将对该图进行解释:

Python中object,type,class类的关系

1. 为什么说Python中一切皆对象

上图描述了Python中类和对象的关系,实际上Python中的类是类对象,本质上它也是一个对象。其中type函数是由type类实例化得到的,type类对象是由type函数生成的,class(用户自定义)类对象和object类对象也是由type函数生成的。

class A():
    pass

print(type.__class__)    # 生成type类对象的类
print(object.__class__)  # 生成object类对象的类
print(A.__class__)       # 生成A类对象的类

a = 1
print(int.__class__)     # 生成int类对象的类,该类和type,object都是由type对象生成
print(a.__class__)       # 生成a的类
           

输出为:

<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
<class 'int'>
           

可知,type函数本身就属于一个对象。object, type, class(用户自定义)均为类对象,由type函数生成,可类比于对象a是由int函数生成。object, type, class(用户自定义的类)类实例化后生成其他对象,因此,在Python中一切皆对象。

注:在Python系统中object和class可以被实例化,type实例化会报错,因为系统默认type为type函数。
# 用户自定义类和object类可以成功实例化
class A():
    pass

a = A()       
b = object()
           
Python中object,type,class类的关系

2. 继承关系

Python中的类有object, type, class(用户自定义的类)三种,object是所有类的父类,并且object没有父类,type和class(用户自定义类)继承了object类。

class A():
    pass

print(object.__bases__)
print(type.__bases__)
print(A.__bases__)
           

输出为

()
(<class 'object'>,)
(<class 'object'>,)
           

查了一晚的资料加整理,凌晨4:57,晚安!

继续阅读