Что лучше в этом случае мерзости одного лайнера, и почему?
Эти две функции, кажется, делают одно и то же, так какой смысл использовать getattr?
getattr(__import__("os"), "chdir")("/content/")
__import__("os").__dict__["chdir"]("/content/")
2 ответа
getattr
а также __dict__
полезны только тогда, когда вам нужно получить значение атрибута, имя которого вы можете получить только во время выполнения. Поскольку в этом случае вы уже знаете, что вы хотите фиксированный атрибут chdir
нет смысла использовать getattr
или доступ к __dict__
приписывать. Вместо этого вы можете просто сделать:
__import__('os').chdir("/content/")
Но опять же, поскольку модуль, который вы импортируете, тоже исправлен, вам следует придерживаться нормального использования import
:
import os
os.chdir("/content/")
Игнорируя злобность их обоих, они семантически отличаются в Python 3.7.
__import__(some_mdl).__dict__[name]
найдуname
если он был явно определен / назначен в модуле;getattr(__import__(some_mdl), name)
найдуname
если он был явно определен / назначен в модуле, а если нет, то вызовитеsome_mdl.__getattr__(name)
еслиsome_mdl.__getattr__
определяется.