gpt4 book ai didi

python - 理解和测试 [self._class_._module_]._file_

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:57 26 4
gpt4 key购买 nike

在阅读基于python的软件时,我对一行python代码感到困惑:path = sys.modules[self.__class__.__module__].__file__

我可以猜测它试图返回类文件中的文件名,但我不太清楚它的确切用法。我将相关代码段保存到名为 test.py 的文件中,并尝试通过 python test.py 对其进行测试,但它不打印任何内容。我如何测试这种文件?

import os
import sys

class testloadfile:
def __init__(self, test_path=None):
if test_path is None:
path = sys.modules[self.__class__.__module__].__file__
# print path
path = os.path.abspath(os.path.join(path, os.pardir))
# print path
path = os.path.join(path, "test.r")
print(path)
test_path = path

print("r file loaded")

最佳答案

Python 中的类有一个 __module__ 属性,其中包含定义该类的模块的名称。此外,每个模块都包含一个 __file__属性,具有 .py 文件的完整路径。

他正在尝试获取定义类的文件的文件路径,但他没有采取最好的方法,理想情况下你可以只索引 sys.modules通过使用 __name__ :

path = sys.modules[__name__].__file__ 

而不是遍历类(即self.__class__.__module__ == __name__)。请注意,if __name__ == "__main__" 这将失败,因为 __main__模块没有定义 __file__ 属性。您需要防范它:

path = sys.modules[__name__].__file__ if __name__ == "__main__" else __file__

其中 if __name__ == "__main__"__file__ 将包含正在执行的文件的路径。

接下来,在脚本中添加常用子句,以便在脚本作为 __main__ 运行时初始化对象:

if __name__ == "__main__":
testloadfile() # initialize

现在,如果您将其称为 __main__ 脚本:

python -m test.py 

或者,如果您导入它,它将获取__file__属性,打印它,然后打印文件名。

P.s:修复最终打印中的缩进。

关于python - 理解和测试 [self._class_._module_]._file_,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38235566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com