Ну, это не так просто.
На самом деле, оператор import во многих отношениях выглядит как прямое определение чего-то вместо этого. Если вы напишите
class test:
from platform import system
это выглядит так же, как
class test:
def system():
# ....
и тогда у вас возникают следующие проблемы:
- вы не можете использовать только system (), потому что система не находится в глобальной области видимости
- вы не можете использовать self.system (), потому что в этой форме python автоматически передает
self
в качестве первого аргумента, но system () не имеет параметров, и вы получите TypeError: system() takes no arguments (1 given)
- вы не можете использовать test.system (), потому что system () выглядит как простой метод, и вы получите
TypeError: unbound method system() must be called with test instance as first argument (got nothing instead)
Существует несколько способов решения этих проблем:
- поместите
import platform
на верхний уровень и используйте platform.system (), где вы хотите, тем самым устраняя проблему № 1 из пред. список
- используйте
staticmethod
decorator, исправляя проблемы № 2 и № 3 из пред. список.
как
class test:
from platform import system
system = staticmethod(system)
тогда вы можете использовать либо self.system (), либо test.system ()
На самом деле, вы должны просто импортировать все на верхний уровень и забыть об этом.
Вы должны разделить объявления импорта, только если вам нужно что-то особенное для запуска.
Как
import foo
import bar
def fun(param1, param2):
# .....
if __name__ == '__main__':
from sys import argv
if len(argv) > 2:
fun(argv[1], argv[2])
В этом примере перемещение from sys import argv
допустимо, поскольку оно необходимо только при запуске скрипта. Но когда вы используете его как импортированный модуль, в этом импорте нет необходимости.
Но это не ваш случай, потому что в вашем случае system () всегда необходим для тестового класса, поэтому нет причин переносить этот импорт с верхнего уровня. Просто оставь это там и не обращай внимания.