Предположим, вы работаете над проектом python в папке /home/py_project/
Если вы кодируете модуль (файл .py) по следующему пути: /home/py_project/modules/my_file.py
и модули определены в /home/py_project/modules/__init__.py
затем
mymod = __import__(__name__) # import self for dir
print(mymod)
выход: <module 'modules' from '/home/py_project/modules/__init__.py'>
path = __name__.split('.')
print(path)
выход: ['modules', 'my_file']
for mod in path[1:]
разрезая предыдущий список и получая все элементы от 1 до inf, в этом случае рассматривается только 'my_file'.
for mod in path[1:]: # follow path to end
mymod = getattr(mymod, mod) # only have leftmost
# same as mymod = modules.my_file
mydir = os.path.dirname(mymod.__file__)
print(mydir)
выход: /home/py_project/modules
myicon = os.path.join(mydir, self.iconmine)
print(myicon)
выход: /home/py_project/modules/path_to_self.iconmine # I don't know what self.iconmine is, you didn't mention it.
Всегда печатать (или отлаживать) шаги, чтобы понять код.
getattr ()
Метод getattr()
возвращает значение именованного атрибута объект. Если не найден, он возвращает значение по умолчанию, предоставленное функции. Например:
Синтаксис метода getattr ():
getattr(object, name[, default])
Вышеуказанный синтаксис эквивалентен:
object.name
Пример:
class Person:
name = "Louis"
person = Person()
print('Name:', person.name)
print('Name:', getattr(person, "name")) # using getattr() is the same as person.name