如何实现Zope接口?

时间:2011-07-24 18:31:21

标签: python interface zope

我试着了解Zope界面是如何工作的。我知道Interface只是InterfaceClass的一个实例,它只是一个普通的Class。但是,如果Interface只是一个类实例,为什么它可以用作继承的基类?

e.g。 IFoo类(接口):     通

你可以给我一些见解吗?谢谢。

1 个答案:

答案 0 :(得分:3)

Python具有内在的灵活性,只要看起来像基类一样,任何对象都可以是基类。与Python一样,这意味着要实现一些预期在Python类中找到的属性。

Interface类(或它的基础规范和元素)设置了几个。查找以双下划线(__)开头的任何变量集,以获得理解:

  • __module__:包含python路径模块的字符串。

  • __name__:定义类的名称。

  • __bases__:此类的基类。

  • __doc__ :(可选)类的docstring。

此外,当用作基类时,将调用InterfaceClass __init__方法; Python基本上将基类视为元类,只要我们在类定义中使用它,就会创建基类的类(元类)的新实例。这意味着__init__方法将传递新的__name____bases__值,以及所有新的类属性作为关键字参数(包括__module__和可选{ {1}})。

这些都记录在Standard type hierarchy section of the Python Data Model document中(查找关于特殊属性的'classes'段落),并在the same document, in the Customizing class creation section中(具有__doc__属性的基类被视为类型)

因此,任何 python实例至少定义__class____module____name__属性,并且合适的__bases__方法将起作用其他类的基类。 Python完成剩下的工作。