Помните, что self
в BaseClass.__init__
является экземпляром фактического класса, который инициализируется. Поэтому одно из решений - спросить этот класс, из какого модуля он пришел, а затем указать путь к этому модулю:
import importlib
class BaseClass:
def __init__(self):
m = importlib.import_module(self.__module__)
print m.__file__
Я думаю, что, возможно, есть несколько способов получить модуль, который вы не можете импортировать; это не самое надежное решение.
Если все, что вы пытаетесь сделать, это определить, откуда взялся подкласс, то, вероятно, достаточно объединить имя модуля и имя класса, поскольку должно однозначно идентифицировать его:
class BaseClass:
def __init__(self):
print "{}.{}".format(
self.__module__,
self.__class__.__name__
)