python我的代码如何才能发现对象的名称?

小编:艳芬 490阅读 2020.08.25

通常来说是做不到的,因为对象并不真正具有名称。 在本质上,赋值总是会将一个名称绑定到某个值;def和class语句也是如此,但在这种情况下该值是一个可调用对象。 考虑以下代码:

>>> class A:
...     pass
...
>>> B = A
>>> a = B()
>>> b = a
>>> print(b)
<__main__.A object at 0x16D07CC>
>>> print(a)
<__main__.A object at 0x16D07CC>

不严谨地讲,该类有一个名称:虽然它是绑定了两个名称并通过名称 B 发起调用,所创建的实例仍然被视为类 A 的一个实例。 但是实例的名称则无法确定地说是 a 或是 b,因为有两个名称被绑定到了同一个值。

一般来说你的代码应该没有必要“知道”特定值的名称。 除非你是在编写特殊的内省程序,出现这样的问题通常表明如果改变方式可能会更有利。

在 comp.lang.python 中,Fredrik Lundh 在回答这样的问题时曾经给出过一个绝佳的类比:

跟你找出在你家门廊见到的某只猫的名字所用的办法一样:猫(对象)自己无法告诉你它的名字,它根本就不在乎 —— 所以找出它叫什么名字的唯一办法是问你的所有邻居(命名空间)那是不是他们的猫(对象)……

……并且如果你发现它有很多名字或根本没有名字也不必觉得惊讶!

逗号运算符的优先级是什么?
逗号在 Python 中不是运算符。 考虑这个例子:

>>> "a" in "b", "a"
(False, 'a')
由于逗号不是运算符而是表达式之间的分隔符,以上代码的含义就相当于:

("a" in "b"), "a"
而不是:

"a" in ("b", "a")
对于各种赋值运算符 (=, += 等) 来说同样如此。 它们并不是真正的运算符而是赋值语句中的语法分隔符。

关联标签: