在阅读基于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")
答案 0 :(得分:1)
python中的类具有__module__
属性,该属性包含定义类的模块的名称。此外,每个模块都包含__file__
属性,该属性具有.py
文件的完整路径。
他正在尝试获取定义类的文件的文件路径,但他没有采用最好的方法,理想情况下你可以使用{{3 }}:
path = sys.modules[__name__].__file__
而不是通过班级(即self.__class__.__module__ == __name__
)。请注意if __name__ == "__main__"
这会失败,因为sys.modules
模块没有定义__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
或如果你import
它,它将拾取__file__
属性,打印它然后打印文件名。
P.s :修复最终print
中的缩进。