Python 理解和测试[self.\u class.\u模块].\u文件_

Python 理解和测试[self.\u class.\u模块].\u文件_,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,在阅读基于python的软件时,我对一行python代码感到困惑:path=sys.modules[self.\uuuuuuu class\uuuuuuuuu.\uuuuuuu module\uuuuuuuuuu]。\uuuuuuu文件 我可以猜它试图在类文件中返回文件名,但我不太清楚它的确切用法。我将相关的代码段保存到一个名为test.py的文件中,并试图通过python test.py对其进行测试,但它不打印任何内容。如何测试这种文件 import os import sys class

在阅读基于python的软件时,我对一行python代码感到困惑:
path=sys.modules[self.\uuuuuuu class\uuuuuuuuu.\uuuuuuu module\uuuuuuuuuu]。\uuuuuuu文件

我可以猜它试图在类文件中返回文件名,但我不太清楚它的确切用法。我将相关的代码段保存到一个名为
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中的类有一个
\uuuuuuuuuuuuuuu模块
属性,该属性包含在其中定义类的模块的名称。此外,每个模块都包含一个属性,该属性具有
.py
文件的完整路径

他正在尝试获取定义类的文件的文件路径,但他并不是最好的方法,理想情况下,您可以使用以下方法进行索引:

而不是通过类(即
self.\uuuuu类\uuuuu.\uuuuu模块\uuuuuu==\uuuuuuuu名称\uuuuu
)。请注意,
如果&uuuuuu name\uuuuu==“\uuuuuu main\uuuuuuu”
这将失败,因为模块没有定义
\uuuuuu file\uuuuuuuuu
属性。您需要采取以下防范措施:

path = sys.modules[__name__].__file__ if __name__ == "__main__" else __file__
其中
如果
\uuuuuu file\uuuuuu
将包含正在执行的文件的路径

接下来,如果脚本以
\uuuuu main\uuuu
的方式运行,请在脚本中添加惯用子句,以便初始化对象:

if __name__ == "__main__":
    testloadfile()  # initialize
现在,如果将其称为
\uuuuu main\uuuu
脚本:

python -m test.py 
或者,如果您
导入它,它将拾取
\uuuuu文件
属性,打印它,然后打印文件名


p.s:立即修复最终
打印中的缩进,我在这里看不到“任何类型的
main
例程”,而
python
的命令行(!)执行都不会出现这种情况。在这里,您定义了“一个类”,并为该类定义了一个构造函数,似乎您还抛出了一个
print
语句,但我在这里没有看到任何东西告诉
python
当从命令行执行这个
.py
文件时应该做什么。因此,它什么都不做并不奇怪。:-)“现在就去看看吧,”看看一些现有的Python(库)代码。注意他们所做的,你也一样。这真的很奇怪。。。似乎
sys.modules[self.\uuuuu class.\uuuuu.\uuuuu module.\uuuuu.\uuuuu.\uuuuuu
应该只给你
\uuuuu文件.\uuuuuuu
…最终的
打印的正确缩进级别是多少?它是
类定义的一部分还是
初始化方法的一部分,因为它是缩进错误。@Mike:如果最终的
打印()
类定义的一部分(而不是
初始化方法的一部分),运行脚本将在类定义执行时执行它。不管怎样,@mgilson看起来是正确的,它只是一种复杂的方式来获取
\uuu文件\uuu
。是的。。。我想我同意你的看法。。。
python -m test.py