پیشنهاد شگفت‌انگیز سبزلرن: 50% تخفیف خرید دوره PHP
مشاهده دوره
ثانیه
دقیقه
ساعت
روز
پرسش

معنی استفاده از زیرخط تک و دوگانه قبل از نام یک شیء چیست؟

What is the meaning of single and double underscore before an object name?

معنی استفاده از زیرخط تک و دوگانه قبل از نام یک شیء چیست؟

1403/06/02
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

در پایتون، استفاده از زیرخط (underscore) قبل از نام یک شیء، به دلایل خاصی انجام می‌شود که به مدیریت و سازماندهی کد کمک می‌کند:

  1. یک زیرخط (_):

وقتی یک شیء با یک زیرخط شروع می‌شود (مثلاً _variable)، این به معنای آن است که این شیء به طور غیررسمی خصوصی است و نباید به‌طور مستقیم از بیرون از کلاس یا ماژول دسترسی پیدا کند. با این حال، این فقط یک کنوانسیون است و نمی‌تواند مانع از دسترسی به آن شیء شود.

  1. دو زیرخط (__):

وقتی یک شیء با دو زیرخط شروع می‌شود (مثلاً __variable)، این به معنای آن است که این شیء برای استفاده خصوصی‌تر است و پایتون به‌طور خودکار نام آن را تغییر می‌دهد (name mangling) تا از برخورد با نام‌های مشابه در زیرکلاس‌ها جلوگیری کند. این کار به این شکل انجام می‌شود که دو زیرخط اولیه به نام کلاس اضافه می‌شود، مثلاً __ClassName__variable که کمک می‌کند تا از تداخل نام‌ها جلوگیری شود.

در مجموع، استفاده از این کنوانسیون‌ها کمک می‌کند که کد شما منظم‌تر و قابل پیش‌بینی‌تر باشد. اینها قوانین خاصی نیستند بلکه تنها توصیه‌های پایتون هستند که به راحتی درک و رعایت می‌شوند.

class Example:
    def __init__(self):
        self._single_underscore = "I'm a single underscore"
        self.__double_underscore = "I'm a double underscore"
    def get_single(self):
        return self._single_underscore
    def get_double(self):
        return self.__double_underscore
example = Example()
print(example.get_single())  
# Works fine
print(example.get_double())  
# Works fine
print(example._single_underscore)  
# Access directly
print(example.__double_underscore)  
# AttributeError: 'Example' object has no attribute '__double_underscore'

در این کد، می‌بینید که به متغیرهایی با زیرخط تک و دوگانه دسترسی داریم، اما متغیر با دو زیرخط به‌طور مستقیم از خارج از کلاس قابل دسترسی نیست.

پاسخ: 1403/06/02
آخرین آپدیت: 1403/07/25