Python:类如何从函数继承?

时间:2012-08-14 08:31:58

标签: python

这是我无法理解的一段代码:

class COWMeta(type):
    pass

class COWDictMeta(COWMeta):
    ....

我知道如何在python中创建一个新类:

class MyClass(BaseClass):
    ...

但正如手册所述,'键入'是功能。

  

型(...)
  __builtin__模块的功能
  type(object) - >对象的类型类型(名称,基数,字典) - >新类型

一个类如何从函数继承?那段代码意味着什么?

2 个答案:

答案 0 :(得分:4)

type是python中的基本对象 type 。像python中的许多对象类型一样,它充当创建新类型的构造函数,但在它最简单的形式中它将返回现有对象的类型。然后看起来像一个函数。例如,将其与int()list()进行比较。

在python中,您可以创建 new 类型,也称为元类,允许您在Py​​thon中执行各种强大而有趣的技巧。基于type定义类定义意味着您正在创建一个新的元类。

请参阅What is a metaclass in Python?以获得有关哪些元类的深入答案。

答案 1 :(得分:2)

type不是一个函数,例如:

def foo():
    pass

是一个功能。它可以像函数一样调用(和Python中的许多其他对象一样),但它实际上是编码的作为一个类。 type本身可以向您展示这种差异:

>>> type(type)
<class 'type'>
>>> type(foo)
<class 'function'>

文档将其称为“函数”,而不是因为如何实现,而是因为它通常是如何使用。这大致类似于itertools.permutations,虽然文档未明确调用函数暗示为一个:

  

返回迭代中元素的连续r长度排列。

但是itertools.permutations是作为一个类实现的:

>>> type(itertools.permutations)
<class 'type'>