如何获取子类的文件名?

e-i*_*128 2 python inheritance python-3.x

如何获取子类的文件名?

例子:

base.py

class BaseClass:
    def __init__(self):
        # How to get the path "./main1.py"?
Run Code Online (Sandbox Code Playgroud)

main1.py

from base import BaseClass

class MainClass1(BaseClass):
    pass
Run Code Online (Sandbox Code Playgroud)

Spo*_*ser 5

请记住,selfinBaseClass.__init__是正在初始化的实际类的实例。因此,一种解决方案是询问该类它来自哪个模块,然后询问该模块的路径:

import importlib

class BaseClass:
    def __init__(self):
        m = importlib.import_module(self.__module__)
        print m.__file__
Run Code Online (Sandbox Code Playgroud)

我认为可能有多种方式最终会导致无法导入的模块;感觉这不是最强大的解决方案。

如果您要做的只是确定子类的来源,那么组合模块名和类名就足够了,因为这应该唯一标识它:

class BaseClass:
    def __init__(self):
        print "{}.{}".format(
            self.__module__,
            self.__class__.__name__
        )
Run Code Online (Sandbox Code Playgroud)