如何找到所有Python内置私有变量如__file__、__name__

5 投票
2 回答
1187 浏览
提问于 2025-04-18 13:02

我想了解所有Python内置的私有变量,比如__file____name__,以及它们的用途。

但是我在www.python.org上没有找到所有Python内置私有变量的相关文档。

我知道dirvars这两个函数。

那么,我该怎么找到这些变量呢?

2 个回答

6

你怎么看这个呢:

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'f']
>>> [ i for i in dir() if i.startswith("__") and i.endswith("__")]
['__builtins__', '__doc__', '__name__', '__package__']

你可以定义一个辅助函数:

>>> def getprivates(obj):
        return [i for i in dir(obj) if i.startswith("__") and i.endswith("__")]

然后可以把它应用到任何对象上,甚至可以用在dir()这个函数本身:

>>> getprivates(dir())
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__']
2

隐藏属性有时被称为魔法方法(针对对象),如果你想了解更多,可以看看Python的文档,里面的信息很全面,应该能涵盖你想找的所有属性。

当你了解了这些隐藏属性后,你可能会知道自己想要获取什么,但隐藏属性可能会因不同的实现而有所不同。为了简化这个过程,可以使用inspect模块:

import inspect

如果你想获取很多信息:

inspect.getmembers(inspect) 

如果你想获取一个模块的文件和更多信息:

>>> inspect.getfile(inspect)
'/usr/lib/python2.7/inspect.pyc'
>>> inspect.getmoduleinfo(inspect.getfile(inspect))
ModuleInfo(name='inspect', suffix='.pyc', mode='rb', module_type=2)

撰写回答