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)
请记住,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)