Python Zope接口是如何实现的?

Python Zope接口是如何实现的?,python,interface,zope,Python,Interface,Zope,我试图理解Zope接口是如何工作的。我知道Interface只是InterfaceClass的一个实例,它只是一个普通类。但若接口只是一个类实例,为什么它可以作为基类来继承呢 e、 g。 类IFoo(接口): 通过 你能给我一些见解吗?多谢各位 Python天生就是灵活的,任何对象都可以是基类,只要它看起来像基类。与Python的情况一样,这意味着实现一些属性,这些属性应该可以在Python类中找到 接口类(或它的基本规范和元素)设置了几个。查找任何以双下划线(\uuuu)开头的变量集,以了解:

我试图理解Zope接口是如何工作的。我知道Interface只是InterfaceClass的一个实例,它只是一个普通类。但若接口只是一个类实例,为什么它可以作为基类来继承呢

e、 g。 类IFoo(接口): 通过


你能给我一些见解吗?多谢各位

Python天生就是灵活的,任何对象都可以是基类,只要它看起来像基类。与Python的情况一样,这意味着实现一些属性,这些属性应该可以在Python类中找到

接口类(或它的基本规范和元素)设置了几个。查找任何以双下划线(
\uuuu
)开头的变量集,以了解:

  • \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    :包含python路径模块的字符串

  • \uuuu name\uuuu
    :定义类时使用的名称

  • \uuuu base\uuuu
    :此类的基类

  • \uuuu doc\uuuu
    :(可选)类的docstring

此外,当作为基类使用时,将调用InterfaceClass
\uuuuu init\uuuu
方法;Python基本上将基类视为元类,每当我们在类定义中使用它时,就会创建基类的类(元类)的新实例。这意味着
\uuuuuu init\uuuuu
方法将被传递新的
\uuuuu name\uuuu
\uuuuu base\uuuuuuuuuu
值,以及所有新的类属性作为关键字参数(包括
\uuuuuuuu模块\uuuu
和可选的
\uuuuuuuuu文档

所有这些都记录在(查找关于特殊属性的“类”段落)和中(带有
\uuuu class\uuuu
属性的基类被视为一种类型)


因此,任何定义了至少
\uuuuu module\uuuuu
\uuu name\uuuuu
\uuuu base\uuuuuu
属性的python实例,以及合适的
\uuu init\uuuuuuu
方法都将作为其他类的基类。Python完成了其余的工作。

在Zope的接口实现中,有这样一行代码:interface=InterfaceClass(“interface”,module='Zope.interface'),其中InterfaceClass是一个普通类。@Zidadi你说得很对,我的答案是错的,我会设法给你一个正确的答案。@Zidadi更新后解释InterfaceClass是如何成为元类的。