Есть ли способ преднамеренно искажать текущее пространство имен Python? - PullRequest
0 голосов
/ 02 марта 2012

Я ищу способ переместить несколько файлов Python в один файл, например
Вместо двух файлов

foobartest.py from foo import * bar() foo.py
def bar() return 'foobar'

Делать что-то вроде этого: class foo(): def bar() #insert some way to get the class into the namespace bar() Есть ли способ получить локально определенный класс в корневое пространство имен того же сценария?

Причина в том, что я хочу объединить несколько файлов, не меняя все вызовы bar () на foo.bar (), и до сих пор относительно очевидно, как они разбиты на тех, кто читает код.

edit: В целях ясности я искал способ сделать это для всех функций в классе, а не для каждой функции в отдельности. Как способ сделать дикий импорт класса.

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Если foo.bar() является staticmethod или classmethod , вы можете установить bar = foo.bar в верхней части объединенного файла. Например:

class foo:
    @staticmethod
    def bar():
        # ...

bar = foo.bar
bar() # calls foo.bar()
1 голос
/ 02 марта 2012

звучит супер хакерски, но вы можете сделать что-то вроде

>>> class A:
    def x():
        pass
    def y():
        pass


>>> globals().update(A.__dict__)
>>> x
<function x at 0x02AF1CB0>
>>> y
<function y at 0x022D8230>
>>> 
...