gpt4 book ai didi

python - Zope接口(interface)是如何实现的?

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:19 25 4
gpt4 key购买 nike

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

例如类 IFoo(接口(interface)): 通过

您能给我一些见解吗?谢谢。

最佳答案

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

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

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

  • __name__:定义类的名称。

  • __bases__:该类的基类。

  • __doc__:(可选)类的文档字符串。

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

所有这些都记录在 Standard type hierarchy section of the Python Data Model document 中(寻找关于特殊属性的“类”段落),并在 the same document, in the Customizing class creation section 中(具有 __class__ 属性的基类被视为一种类型)。

因此,任何 python 实例至少定义了 __module____name____bases__ 属性,以及一个合适的__init__ 方法将作为其他类的基类。 Python 会完成剩下的工作。

关于python - Zope接口(interface)是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6808798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com