tgoop.com/pyHints/37
Last Update:
همونطوری که احتمالا حدس زدید؛ خروجی خط ۲۱ :
@PyHints
هست.
اما توضیحاتش مهمتر از اینه که بگید خروجی چی هست :
توی پایتون یک موضوعی داریم به اسم variable shadowing اتفاقی که میوفته اینه که توی کد بالا به این موضوعی احترامی گذاشته نمیشه اگر name توی کد بالا یک property نبود قطعا متنی که توی خط ۱۹ بهش داده بودیم رو چاپ میکرد؛
حالا چرا property باعث شده که به variable shadowing احترام گذاشته نشه
توی پایتون یک موضوع دیگری هم وجود داره به اسم Descriptorکه خودش ۲ مدل داره و توی کد بالا ما از data descriptor داریم استفاده میکنیم وقتی شما از property استفاده میکنید چه به صورت تابع چه بصورت decorator اون property در نهایت به صورت data descriptor تعریف میشه
پروتوکل data descriptor به این صورت تعریف میشه:
کلاسی در پایتون که شامل dunder method های :__get__ and __set__ or __delete__باشه که توی property هر ۳ مورد وجود داره
پایتون هم که باشعور وقتی متوجه میشه از پروتوکل data descriptor استفاده شده دیگه از __dict__ موجود برای instance اطلاعات نمیگیره بلکه __get__اون data descriptor رو صدا میزنه به همین دلیل هم خروجی کد بالا
@PyHints
هست.
BY Python Hints

Share with your friend now:
tgoop.com/pyHints/37
