Python 检索有关变量本身的信息?

Python 检索有关变量本身的信息?,python,Python,在Python中,一切都是对象。变量的性质是什么?通过一个例子来探讨它: >>> foo = 1 >>> dir(foo) ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv_

在Python中,一切都是对象。变量的性质是什么?通过一个例子来探讨它:

>>> foo = 1
>>> dir(foo)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', ...]
>>> dir(1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', ...]
在这里,对
dir()
的两个调用都列出了值(用于
1
的int对象)的属性和方法

>>> id(foo)
4376812816
>>> id(1)
4376812816
id()
的调用表明,在这两种情况下,对象是相同的

似乎没有办法获得有关变量本身的信息,而不是它引用的对象的信息。Python中是否有任何东西可以获取关于变量
foo
的信息,而不是它引用的对象

id显示值的id而不告诉变量本身?使用哪个函数可以获取其属性

对象id是不透明的:从id到对象属性没有(有文档记录的、可靠的)方法。
id()
的主要用例是检查两个名称是否引用同一个对象

事实上,
id(foo)
恰好与
id(1)
相同,这是一个错误。它一般不适用于:

>>> foo = 1234
>>> id(foo)
140491179040280
>>> id(1234)
140491179040808

(注意这两个数字有多么不同。)

我将用两篇帖子回答你:是的,在python中,一切都是一个

和类似于C中的内存地址。如果您只想在对象中声明属性,对我来说,最好的选择是使用集合:

class A():
    a = 2 

set(dir(A())) - set(dir(object))
#set(['a', '__module__'])

Python的变量本质上只是对象的名称。这些名称只是对象的标签,因此名称的唯一“属性”是它引用的对象,这正是使用名称所得到的

也就是说,名称应该属于某个东西:范围。名称在其定义的范围内有效,因此如果可以访问该范围,则可以看到名称。您可以使用访问当前本地作用域:

>>> foo = 1
>>> locals()
{'foo': 1, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__', '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__package__': None, '__spec__': None}
>foo=1
>>>本地人()
{'foo':1','uuuuu loader':,'uuuuu name':'uuuuu main','uuuu doc':None','uuuuu builtins':,'uuuuu package':None','uuuuuuu规范:None}
如您所见,该范围中有名称
foo
,以及它所引用的值。但这真的是全部。除了名称、它们引用的对象和它们存在的范围之外,Python变量没有更多的属性。它们不是Python对象意义上的“对象”,因此它们是简化语句“一切都是对象”的一个例外


有关名称的详细信息,请参阅。

变量没有属性。它指向的值具有属性。变量在算法中只是命名的占位符,而不是物理实体。我不太确定您在这里要的是什么。是否要从其ID中查找Python对象?您是否试图找到引用特定ID的名称列表?“变量或名称或引用的性质是什么?”-您希望这个问题得到什么样的答案?您在这里谈论的是什么“属性”?举一些你期望得到的例子。我建议你阅读;标识符本身不是一个东西,只是值上的一个“标记”。