我试着了解Zope界面是如何工作的。我知道Interface只是InterfaceClass的一个实例,它只是一个普通的Class。但是,如果Interface只是一个类实例,为什么它可以用作继承的基类?
e.g。 IFoo类(接口): 通
你可以给我一些见解吗?谢谢。答案 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完成剩下的工作。