π ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Python? π
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ __name__
.
def my_function():
pass
print(my_function.__name__) # ΠΡΠ²Π΅Π΄Π΅Ρ "my_function"
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Python
Π Python Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° __name__
Π Python ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ __name__. ΠΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
def my_function():
pass
print(my_function.__name__) # ΠΡΠ²ΠΎΠ΄ΠΈΡ "my_function"
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ getattr()
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ getattr(). ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ.
def my_function():
pass
print(getattr(my_function, '__name__')) # ΠΡΠ²ΠΎΠ΄ΠΈΡ "my_function"
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡΡ Π² Python ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠΌΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
def print_function_name(func):
def wrapper():
print('ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ', func.__name__)
func()
return wrapper
@print_function_name
def my_function():
print('ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!')
my_function() # ΠΡΠ²ΠΎΠ΄ΠΈΡ "ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ my_function" ΠΈ "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!"
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ sys._getframe()
ΠΠΎΠ΄ΡΠ»Ρ sys Π² Python ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ _getframe(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
import sys
def get_function_name():
return sys._getframe().f_code.co_name
def my_function():
print('ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ', get_function_name())
my_function() # ΠΡΠ²ΠΎΠ΄ΠΈΡ "ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ my_function"
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Python. ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΈ Π·Π°Π΄Π°ΡΠΈ.