Другие использования атрибута __name__

Я изучаю Python, читая Dive Into Python в Интернете, а в главе 2 я вижу, что вы можете использовать атрибут __name__ для в целях тестирования, поэтому мне было интересно, знает ли кто-нибудь о других целях использования этого атрибута? Благодаря

2 ответа

У меня когда-то был декоратор для файла командной строки script.

Декоратор использовался следующим образом:

@command
def someFunc():
 # code goes here

Декоратор делал что-то вроде этого:

commands = {}
def command(func)
 commands[func.__name__] = func
 return func

И тогда я мог бы сделать что-то вроде этого:

commandName = raw_input()
commands[commandName]();

Что бы прочитать имя команды из консоли и вызвать ее - если раньше она была помечена декоратором (так что опасных вызовов не было бы возможным, как в случае с input).

(В моем коде имя было взято из командной строки args, а не raw_input.)

Это легко позволяет мне предоставлять команды, доступные через их имя. Это одно из применений - общее правило было бы "полезно, когда вы хотите добавить свою собственную семантику к понятию определения функции" . То же самое касается декораторов в целом.

(BTW, there func.func_name), которое более корректно использовать, чем func.__name__, поскольку идентификаторы, начинающиеся с __, должны быть закрытыми в Python, AFAIK - всего лишь небольшая деталь)


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

licensed under cc by-sa 3.0 with attribution.