You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 1或Python 2中能否创建非类的新type?实现方式是什么?

结论

  • Python 1 全版本、Python 2.1.x及更低版本:无法创建新的type类型实例,这些版本还未引入新式类和元类体系,object基类本身不存在,内建type也不支持用户自定义扩展。
  • Python 2.2及以上的2.x版本:可以创建新的type(即新式类),你给出的第二个Python2代码示例中生成的foo本身就是符合要求的type类型实例,它和旧式类的classobj有本质区别。

具体实现方法

方法1:显式声明继承object的新式类

只要自定义类显式继承object,生成的类就是type的实例:

#!/usr/bin/env python2
class foo(object):
    pass

print(type(foo))
# 输出:<type 'type'>

方法2:调用元类type动态生成

type本身是元类,可以直接调用它的构造方法动态创建新式类,语法为type(类名, 父类元组, 类属性字典):

#!/usr/bin/env python2
# 等价于上面的类声明写法
foo = type('foo', (object,), {})

print(type(foo))
# 输出:<type 'type'>

原理补充

Python 2 中旧式类(不继承object的类)的默认元类是types.ClassType,所以旧式类的类型为classobj;而新式类(继承object的类)的默认元类是内建的type,因此你创建的新式类本身就是type的实例,也就是你所问的「新的type」。


内容的提问来源于stack exchange,提问作者Chen-Y0y0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:57:03