关于python:如何获取包含该类的文件的名称?

How to get the name of the file containing the class?

本问题已经有最佳答案,请猛点这里访问。

是否可以获取包含类的文件名?变量exporter是下面的一个类。

1
2
3
4
5
6
def main(exporter):

    v = exporter
    print v # <__main__.Vudu object at 0x106ea5210>
            # The class is"Vudu" and the filename that contains that class
            # is called vudu_exporter. How would I get"vudu_exporter" ?

更新:以下操作用于获取包含类的脚本的名称:

1
script_name = os.path.basename(inspect.getfile(v.__class__))


在类/函数/方法/模块上调用inspect.getfile。它不能保证工作,但它比检查对象的__file__属性更可靠(例如,在python 3.5上,inspect.getfile(collections.defaultdict)工作,而collections.defaultdict.__file__则提高AttributeError

如果您有一个实例,如果不首先转换到类,这将无法工作,例如,inspect.getfile(type(instance))(在python 2上,instance.__class__可以更可靠地使用旧样式的类);它只能告诉您在哪里定义了类,而不是在哪里定义了实例。