معنی underscore تکی و دوتایی استفاده شده در نام اشیا در پایتون چیست؟

mohsen2 هفته قبل
ارسال شده در
python

در پایتون، وجود underscore تکی ( _ ) و دوتایی ( __ ) قبل از نام اشیا، نشان‌دهنده مقاصد متفاوتی است که عموماً به مفاهیم دسترسی و قابلیت مشاهده مربوط می‌شود.

underscore تکی (_var_name)

وجود underscore تکی در نام یک متغیر یا تابع به برنامه‌نویس‌ها نشان می‌دهد که این متغیر یا تابع به‌طور داخلی در کلاس یا ماژول مورد استفاده قرار می‌گیرد و احتمالا نباید به‌طور مستقیم توسط کاربر نهایی استفاده شود. این موضوع در حقیقتن نوعی قرارداد است و پیاده‌سازی دسترسی را در سطح زبان اعمال نمی‌کند. به طور خاص:

  • اگر ماژول foobar وجود داشته باشد و در آن تعریف نشود که __all__ چیست، نام‌های با underscore تکی هنگام استفاده از دستور from foobar import * از ماژول ایمپویت نمی‌شوند.
  • همچنین، نام‌های با underscore تکی می‌توانند به‌عنوان متغیرهای «محافظت‌شده» نیز عمل کنند، به‌خصوص زمانی که یک متد در کلاس پایه قرار دارد، که از ارث‌برداری در کلاس‌های فرزند حذف می‌شود و تنها برای قابل‌دسترس بودن درون کلاس طراحی شده‌اند.

underscore دوتایی (__var_name)

وقتی دو underscore قبل از نام یک متغیر یا تابع قرار می‌گیرد، این عمل باعث "name mangling" می‌شود. به این معنی که نام متغیر به صورت خودکار به‌صورت _classname__var_name تغییر می‌کند، که classname نام فعلی کلاس است. این کار به‌طور عمده برای جلوگیری از هم‌نامی با متغیرهای مشابه در کلاس‌های فرزند انجام می‌شود و اقداماتی نظیر ایجاد متغیرهای خصوصی کلاس را آسان‌تر می‌کند. با این حال، احتمال دسترسی به این متغیرها همچنان وجود دارد و هیچ روشی برای جلوگیری کامل از آن وجود ندارد.

مثال

      class MyClass():
    def __init__(self):
        self.__superprivate = "Hello"
        self._semiprivate = ", world!"

mc = MyClass()
print(mc.__superprivate)  # خطا: این متغیر قابل دسترسی نیست
print(mc._semiprivate)     # خروجی: ، world!
print(mc.__dict__)         # خروجی: {'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!'}

    
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!