ترفند پایتونی 4 – Underscores

خط زیر، یا بهتره بگیم Underscore ها چه از یکی (single) و چه از نوع دابل (double) در پایتون معنای متفاوتی دارند و حتی جای قرار گیریشون هم معنی متفاوتی ایجاد میکنه. هر چند برخی از این معانی بیشتر حالت قراردادی داره تا یک الزام باشه. 5 حالت underscore که قراره در ادامه بررسی شوند به این صورت هستن:

  1. Single Leading Underscore : _var
  2. _Single Trailing Underscore : var
  3. Double Leading Underscore : __var
  4. __Double Leading and Trailing Underscore : __var
  5. _ : Single Underscore

1- Single Leading Underscore یا  “var_”

پایتون برخلاف زبان های برنامه نویسی مثل java الزامی برای تعیین private یا public بودن متغیرها نداره ولی به صورت قراردادی و بین برنامه نویسان پایتون مرسومه که در صورت استفاده از یک underscore قبل از متغیر اون متغیر private هستش. یعنی اینه که “برنامه نویس عزیز، رفیق، دوست من؛ این متغیر برای استفاده عمومی نیست ازش لطفا استفاده نکن”. به عبارت دیگه یعنی ” این متغیر private هستش خواهشا استفاده نفرمایید حتی شما دوست عزیز”. هر چند که شما دسترسی دارید می تونید تغییر بدید متغیر رو یا استفاده کنید. به طور مثال:

 

2- Single Trailing Underscore یا  “_var”

گاهی پیش میاد که می خواهیم از نام هایی که قبلا در پایتون استفاده شده، استفاده کنیم. ولی در صورت استفاده با خطای invalid syntax مواجه می شویم. اگر اصرار به استفاده از اون عبارت داریم یک راهکار اینه که از underscore پس از نام عبارت مورد نظرمون استفاده کنیم. به طور مثال:

 

داستان underscore ها در حالت دابل کمی متفاوت تره!

به دو underscore پشت سر هم dunder هم میگن!

به طور مثال به __init__ میگن dunder init و البته به var__ هم میگن dunder var

3- Double Leading Underscore یا  “var__”

مفسر پایتون در صورت استفاده از دو underscore به صورت پیشوند؛ اون عبارت رو چه متغیر باشه و چه متود (method) برای جلوگیری از تداخل نام ها (در subclass) تغییر نام میده. به این عمل name mangling می گویند. به طور مثال:

در خروجی اگه کمی دقت کنید baz__ رو پیدا نمی کنید! چون پایتون نام رو به Test__baz_ تغییر داده.

مثال دیگر که نشون میده برای برنامه نویس این متغیر که با dunder شروع شده قابل استفاده و در اجرا تغییر نام خواهد داشت و نام مورد نظر در دسترس نیست مثال زیره:

در صورتی که mangled__ به صورت مستقیم فراخوانی کنیم با خطا AttributeError رو به رو میشیم.

یه موضوع جالب این که شما می تونید با تغییر نام متغیر با توجه به خروجی پایتون به مقدار مورد نظر دسترسی پیدا کنید. به طور مثال در کد زیر MangledGlobal__mangled_ که به صورت global تعریف شده در خروجی mangled__ تغییر نام به MangledGlobal__mangled_ خواهیم داشت و در نتیجه خروجی متغیر بدون خطا خواهیم داشت.

 

4- Double Leading and Trailing Underscore یا  “__var__”

متود ها (method) با دو underscore در پیش و دو underscore در پس، به dunder methods یا magic methods معروفن! هر چند که زیاد جادویی هم نیستن و اسم چندان جالبی نیست 😉

این متود ها رزرو شده هستن و از پیش ساخته البته شما میتونید متودهای خودتون رو با همین شرایط بنویسید. به طور مثال:

 

5- Single Underscore یا  “_”

اگه اسم متغیری مهم نباشه یا موقتی باشه از _ استفاده میشه. به طور مثال:

یک کاربرد دیگه _ برای unpack کردن هستش. وقتی که براتون مقدار یه لیست مهم نیست و و لازمه فقط مقدار رو به یه متغیری پاس بدید میتونید از _ استفاده کنید. به طور مثال:

 

 

 

 

 

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست