【发布时间】:2021-06-30 01:07:57
【问题描述】:
Python 中的对象分为三个层次:
-
元类是一个对象
x,因此isinstance(x, type) and issubclass(x, type)的计算结果为True; -
class 是一个对象
x,因此isinstance(x, type)的计算结果为True。所以这包括元类; - 一个对象。所以这包括类。
因此这三个集合之间的关系是适当的包含:元类⊂类⊂对象。
例子:
class M(type): pass
class C(metaclass=M): pass
o = C()
| Name | Metaclass | Class | Object |
|---|---|---|---|
M |
True |
True |
True |
C |
False |
True |
True |
o |
False |
False |
True |
对于非元类类(例如示例中的C)和非类对象(例如o)是否有任何常规术语在示例中)?
对于包含相关的集合,此术语问题很常见。例如,数字具有以下关系:自然数⊂整数⊂有理数⊂实数⊂复数。 非自然整数是负整数,非有理实数是无理数。但是,我不知道 非整数有理数或非实数复数的任何术语。
【问题讨论】:
-
非实数复数 == 虚数,不是吗?
-
您希望在哪些情况下使用这些术语?
-
@wjandrea 不,虚数没有实部,因此它们只是非实数复数的子集。这个问题的上下文是 Python。
-
@wjandrea 例如Python documentation:“可以定义以下方法来自定义类的属性访问(
x.name的使用、分配或删除)的含义实例。”他们使用术语“类实例”,但这是不正确的,它们的意思是非类对象。类实例并不总是非类对象,也可以是类,它不调用object.__getattribute__/__setattr__/__delattr__而是type.__getattribute__/__setattr__/__delattr__ -
@Maggyero:它们并不是指“非类对象”。这有点令人困惑,但是当数据模型文档说
object.__whatever__时,它们并不具体指特定类object的__whatever__方法。object甚至没有拥有大多数这些方法。他们只是使用object作为通用占位符名称。
标签: python class object terminology metaclass