【问题标题】:When we create an object of class A in python and it contain suppose two instance variable x=10 and y=11当我们在 python 中创建类 A 的对象时,它包含假设两个实例变量 x=10 和 y=11
【发布时间】:2022-01-07 16:32:28
【问题描述】:

当我们在 python 中创建一个类 A 的对象时,它包含两个实例变量 x=10 和 y=11。类 A 的对象是否仅包含实例变量的引用 x 和 y 以及值 10 和 11,因为对象将存储在堆中的不同位置?因此,由于 python 中的所有内容都是对象,实例变量也是对象,所以类 A 对象将仅包含引用 x 和 Y,而实际对象将存储在堆中的不同位置?我的理解正确吗?

【问题讨论】:

  • 你能展示实现这个场景的代码吗?特别是,您如何定义 A 以及实例变量如何获取它们的值?
  • 是的,如果A的实例有10和11作为其属性,这些属性只是引用,数字10和11的实际数据不会存储在A的实例中.
  • 您可能想阅读nedbatchelder.com/text/names.html,其中包含有用的图表,在这里创建太麻烦了。
  • 其实Python中只有一个整数为10,所有等于10的整数都是同一个对象。 (试试5 + 5 is 10。操作符is 会检查对象的身份,即事物是否位于相同的内存位置。)

标签: python oop


【解决方案1】:

没错。假设如下代码

class A:
    def __init__(self):
        self.x = 10
        self.y = 11

a = A()

有一个A 类型的对象(由名称a 引用)和两个int 类型的对象(10,由a.x 引用;和11,由@987654328 引用@)。

(还有一个type类型的对象,被A引用。和一个function类型的对象,被A.__init__引用。)

【讨论】:

  • 还有更多对象,如A.__mro__a.__dict__、字符串'x'等。即使在非常简单的代码中,Python 也确实创建了 很多 个对象。
  • 是的,我试图将答案限制在立即可见的对象上。
猜你喜欢
  • 2021-01-23
  • 2020-09-21
  • 2021-09-09
  • 2012-02-18
  • 1970-01-01
  • 2020-12-17
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多