子类与父类的关系中的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的子类呢? 问题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 小助理,如未能正确解答您的问题,请继续追问。 1. python的一些类型是“隐藏”的,无法直接使用,只能间接使用,比如function,只能通过 type(func) 的方式调用
2. 所有类本身是 type 类型,比如说 int,“int”是type的实例,就像0是int的实例一样;但int(),int的实例就不是type实例了 既然function 类型本身是 type 的实例,那么isinstance(function, type)报错,是为什么? kcvin 发表于 2025-4-27 22:37
既然function 类型本身是 type 的实例,那么isinstance(function, type)报错,是为什么?
1. python的一些类型是“隐藏”的,无法直接使用,只能间接使用,比如function,只能通过 type(func) 的方式调用
求最佳
页:
[1]