- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在阅读基于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/
我在 C 语言中使用 Code::Blocks 和 C 代码并且有一些错误.. #include #include #include #define SQRT(num) \ ((num>0
我在 debug.h 中有以下代码: #ifndef __DEBUG_H__ #define __DEBUG_H__ #ifdef DEBUG int al_debug(const char *for
在阅读基于python的软件时,我对一行python代码感到困惑:path = sys.modules[self.__class__.__module__].__file__。 我可以猜测它试图返回类
我想知道一种方法是否比另一种更好。我一直在使用 $_SERVER 方法指向当前目录,但是这种方法比 realpath(dirname(_FILE_)) 方法更好还是有什么区别? 最佳答案 $_SERV
go 中是否有任何类似于 "_file_" 或 "_line_" 的函数,以便知道谁在运行时调用特定函数?在 C 语言中,我们有可以作为宏调用的 "_file_" 行。如何在 go 中执行此操作? 最
我是一名优秀的程序员,十分优秀!