【发布时间】:2012-06-27 04:10:35
【问题描述】:
我正在阅读这篇关于元类What is a metaclass in Python? 的有趣帖子。接受的答案显示了如何使用具有以下签名的类型创建一个类。
type(类名, 父类的元组(用于继承,可以为空), 包含属性名称和值的字典)
我尝试使用上面的签名创建“类型”类,我很惊讶我一开始就被允许创建一个!感谢您的意见!
type = type('type',(),{});
其次,在我使用上面的语法创建了一个类型类之后,我无法做到
myclass = type('myclass',(),{});
和
type = type('type',(),{});
我收到一个错误提示
Traceback(最近一次调用最后一次):文件“”,第 1 行,in TypeError: object.new() 没有参数
但是,当我尝试以下操作时,我可以成功。
class myclass(object):
pass
我很困惑,因为根据我的理解,上面的 sn-p 应该调用 type 来尝试创建类“myclass”。发生什么了!?我错过了一些细节吗?
【问题讨论】:
-
为了记录,这里用来指代元类的类型类是用词不当; type classes 是 Haskell 和 Scala 等函数式编程语言中广泛使用的概念,与元类无关。