【问题标题】:what is id() of a python class, not class instance什么是 python 类的 id(),而不是类实例
【发布时间】:2021-05-11 10:39:34
【问题描述】:

来自python文档的id()函数:

返回对象的“身份”。这是一个整数(或长整数),保证该对象在其生命周期内是唯一且恒定的。具有不重叠生命周期的两个对象可能具有相同的 id() 值。

CPython 实现细节:这是对象在内存中的地址。

这很清楚,我明白了。它将一个 python 类实例传递给 id 函数,它返回该对象的“身份”/地址。但是,如果将 python 类名传递给 id 函数。它返回什么?来自示例。

class Abc:
    value = 0

x = Abc()

id(x)  # -> 65097560

id(Abc)  # -> 67738424

我知道 65097560 是对象x 的内存地址。但是id(Abc)/67738424是什么意思呢?

【问题讨论】:

  • 类是对象。所有相同的信息都适用。
  • 返回对象ABC的标识。由于一切都是对象,您甚至可以获得函数的标识,例如print(id(abs)).
  • Abc 只是type 的一个实例,您可以通过评估type(Abc) 来观察它。
  • @Matthias 或 id(id) :-)
  • ID 的任何更深层次的“含义”都取决于实现。对于大多数实现,这将是 type 实例对象的内存地址,就像其他对象一样。

标签: python class object identity


【解决方案1】:

Classes are objects themselves。它们是metaclass type 的实例。 (type 也用于确定某物的类型。)

>>> class Abc: pass
... 
>>> type(Abc)
<class 'type'>
>>> id(Abc)
39363368

在 Python 2 中,旧式类是 classobj 的实例。

>>> class Old: pass
... 
>>> type(Old)
<type 'classobj'>
>>> id(Old)
140369496387664
>>> class New(object): pass
... 
>>> type(New)
<type 'type'>
>>> id(New)
94676790299104

一般来说,everything is an object in Python,包括像 id() 本身这样的函数,像 list 这样的内置类型/类,以及像 sys 这样的模块。虽然有一些例外,如关键字和运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多