Как получить доступ к именам функций, определенных перед классом внутри класса

Рассмотрим следующий файл myfile.py.

def f_1():
    print("Run !")

def f_2():
    print("Run, run !")

class Test():
    def __new__(cls):
        print("In the class", dir())

print("After class", dir())
Test()

Я хотел бы получить доступ ко всем функциям, определенным перед моим классом внутри него. Внутренний каталог относится к классу, а не к файлу, как показано выше.

After class ['Test', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'f_1', 'f_2']
In the class ['cls']

Одним из решений было бы добавить глобальную константу previousnames = dir() непосредственно перед классом, но есть ли лучший способ сделать это?


person projetmbc    schedule 26.04.2015    source источник
comment
Что вы пытаетесь достичь? Лучше прямо говорить об этом типе вещей; просто сохраните (с известным именем) список или словарь глобальных функций, к которым Test нужен доступ, и позвольте Test выполнить итерацию по известному списку/словарю.   -  person chepner    schedule 26.04.2015
comment
Я хочу добавить методы в класс, но у меня нет возможности создать подкласс. См. этот пост, чтобы узнать почему.   -  person projetmbc    schedule 26.04.2015


Ответы (1)


Как я уже сказал в своем комментарии: будьте явными и не пытайтесь выполнять динамическое обнаружение функций. dir в любом случае не предназначен для программного использования; это помощник для использования в интерактивной оболочке.

def f_1():
    print("Run !")

def f_2():
    print("Run, run !")

for_Test = [f_1, f_2]

class Test():
    def __new__(cls):
        for f in for_Test:
            # Based on your linked question
            setattr(cls, f.name, f)
person chepner    schedule 26.04.2015
comment
Большое спасибо, это делает работу. Я буду более явным в будущем. ;-) - person projetmbc; 26.04.2015