TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #77 · 29 апр.

Каждый модуль в Python имеет атрибут ˍˍnameˍˍ. В него записывается строка, содержащая полное имя модуля. Например: >>> from my_package import my_module >>> print(my_module.__name__) 'my_package.my_module' Очень удобно для логгинга когда в имя логгера требуется записать имя модуля, в котором происходят события лога. Но однажды мне потребовалось создать логгер не для модуля в целом, а для отдельной функции. Что в этом случае можно сделать? Такой объект как функция тоже имеет атрибут ˍˍnameˍˍ >>> class MyClass: >>> def func(self): >>> pass >>> print(MyClass.func.__name__) 'func' Итого нам следует собрать полное имя таким образом: >>> full_name = '.'.join([__name__, MyClass.__name__, MyClass.func.__name__]) >>> print(full_name) 'my_package.my_module.MyClass.func' А что если класс вложен в другой класс? >>> class MyClass: >>> class SubClass: >>> def func(self): >>> pass >>> full_name = '.'.join([__name__, MyClass.__name__, MyClass.SubClass.__name__, MyClass.SubClass.func.__name__]) >>> print(full_name) 'my_package.my_module.MyClass.SubClass.func' А что если вложений несколько? >>> class MyClass: >>> class SubClass1: >>> class SubClass2: >>> def func(self): >>> pass Даже не буду писать пример получения имени 😭. А что если функция не из этого класса а унаследована и вы работаете с внешней библиотекой? >>> from somewhere.something import OtherClass >>> class MyClass2(OtherClass): >>> pass Cтрашно подумать как нам достать настоящее "полное имя" функции! А если там динамическое определение наследования или метаклассы? Вообще можно забить на решение и придумать другой способ 😵 На помощь приходит PEP3155 и его имплементация "Qualified name". Всё очень просто, начиная с Python 3.3 классы и функции имеют атрибут ˍˍqualnameˍˍ, который и содержит полное или "честное" или "квалифицированное" имя объекта. Именно в него уже записан готовый полный адрес объекта. И теперь даже такая конструкция сработает правильно: >>> # some_module.py >>> >>> class OtherClass: >>> class SubClass1: >>> class SubClass2: >>> def func(self): >>> pass >>> >>> # my_module.py >>> from some_module import OtherClass >>> class FinalClass(OtherClass.SubClass1.SubClass2): >>> pass >>> >>> full_name = '.'.join([__name__, FinalClass.func.__qualname__]) 'my_package.my_module.OtherClass.SubClass1.SubClass2.func' Тут стоит заметить, что если функция находится не в текущем модуле а откуда-то импортирована (как в моём примере) то собирать имя с локальным атрибутом ˍˍnameˍˍ уже не имеет особого смысла. Тогда лучше использовать имя модуля исходного класса: >>> full_name = '.'.join([FinalClass.__module__, FinalClass.func.__qualname__]) 'some_module.OtherClass.SubClass1.SubClass2.func' #pep

Hashtags

Резултати

Пронајдени 124 слични објави

Пребарај: #aria

当前筛选 #aria清除筛选
CryptoBull_360™

@cryptobull_360 · Post #48708 · 10.03.2026 г., 09:02

✨ ✨#ARIA Trade in VIP channel👀📈📈 👍👍Congratulations VIP Members 💸💸 What are you waiting for? You are missing huge profits 💰😎 ‼️ Recover fee within few hours ‼️ ☑️ Join VIP @CryptoBull_360_admin☑️

Hashtags

Crypto Signals & Bot Trades

@cryptosignalalert · Post #27815 · 05.12.2025 г., 17:37

💰💰#ARIA/USDT delivered huge profits for our premium members — proof of why we're among the best in the game! 👁‍🗨 Want to trade smarter and faster? Contact @cripexperts to join our premium group and trade with top-tier experts.

Hashtags

Free Crypto Signals (Profitable Zone)

@btctradingclub · Post #26524 · 05.12.2025 г., 13:25

✅✅88% Profit on #ARIA/USDT for our Premium Members on Binance Futures/Bybit/OKEX - All profit targets completed 👁‍🗨Contact @primemod to enter the Premium Group and trade on high quality SPOT as well as FUTURES Calls

Hashtags

123•••1011
ПретходнаСтраница 1 од 11Следна