kcvin 发表于 2025-4-27 22:21:19

子类与父类的关系中的2个疑问?

1、
def func():
    print("hello")

type(func)
<class 'function'>

既然func是一个function类的实例,那么issubclass(function, type)为什么会报错?

2、
type(int)
<class 'type'>

issubclass(int,type)
False

int为什么不是type的子类呢?

FishC 发表于 2025-4-27 22:22:08

问题1解答
当执行 type(func) 得到的是 function 类型,但要注意:


[*]function 类型本身是 type 的实例(由type创建),而不是子类
[*]所有类型的继承关系都要通过 __bases__ 属性查看,而 function.__bases__ 实际上会报错(因为function类型不能直接访问)
[*]正确的判断应该是 issubclass(type(func), type),结果为True


问题2解答
int 类型和 type 的关系:


[*]type(int) 得到 type,说明int类型是由type元类创建的
[*]但类的继承关系是看 __bases__ 属性:int.__bases__ 返回 (object,)
[*]所有内置类型最终继承自object,而type是元类(创建类的类),属于不同维度的关系


可用代码验证:

print(isinstance(int, type))# True(说明int类型本身是type的实例)
print(issubclass(int, object))# True(继承关系)
print(issubclass(type, object))# True(type本身也继承自object)


总结:元类关系(实例与type)和继承关系(子类与父类)是两个不同维度的概念。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 2025-4-27 22:35:24

1. python的一些类型是“隐藏”的,无法直接使用,只能间接使用,比如function,只能通过 type(func) 的方式调用

2. 所有类本身是 type 类型,比如说 int,“int”是type的实例,就像0是int的实例一样;但int(),int的实例就不是type实例了

kcvin 发表于 2025-4-27 22:37:06

既然function 类型本身是 type 的实例,那么isinstance(function, type)报错,是为什么?

player-none 发表于 2025-4-27 22:40:51

kcvin 发表于 2025-4-27 22:37
既然function 类型本身是 type 的实例,那么isinstance(function, type)报错,是为什么?

1. python的一些类型是“隐藏”的,无法直接使用,只能间接使用,比如function,只能通过 type(func) 的方式调用

求最佳
页: [1]
查看完整版本: 子类与父类的关系中的2个疑问?