鱼C论坛

 找回密码
 立即注册
查看: 96|回复: 4

[已解决]子类与父类的关系中的2个疑问?

[复制链接]
发表于 2025-4-27 22:21:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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的子类呢?
最佳答案
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是元类(创建类的类),属于不同维度的关系


可用代码验证:

  1. print(isinstance(int, type))  # True(说明int类型本身是type的实例)
  2. print(issubclass(int, object))  # True(继承关系)
  3. print(issubclass(type, object))  # True(type本身也继承自object)
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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是元类(创建类的类),属于不同维度的关系


可用代码验证:

  1. print(isinstance(int, type))  # True(说明int类型本身是type的实例)
  2. print(issubclass(int, object))  # True(继承关系)
  3. print(issubclass(type, object))  # True(type本身也继承自object)
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-27 22:35:24 | 显示全部楼层
1. python的一些类型是“隐藏”的,无法直接使用,只能间接使用,比如function,只能通过 type(func) 的方式调用

2. 所有类本身是 type 类型,比如说 int,“int”是type的实例,就像0是int的实例一样;但int(),int的实例就不是type实例了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-4-27 22:37:06 | 显示全部楼层
既然function 类型本身是 type 的实例,那么isinstance(function, type)报错,是为什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-27 22:40:51 | 显示全部楼层
kcvin 发表于 2025-4-27 22:37
既然function 类型本身是 type 的实例,那么isinstance(function, type)报错,是为什么?
1. python的一些类型是“隐藏”的,无法直接使用,只能间接使用,比如function,只能通过 type(func) 的方式调用


求最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-5 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表