معنی استفاده از زیرخط تک و دوگانه قبل از نام یک شیء چیست؟
What is the meaning of single and double underscore before an object name?
معنی استفاده از زیرخط تک و دوگانه قبل از نام یک شیء چیست؟
در پایتون، استفاده از زیرخط (underscore) قبل از نام یک شیء، به دلایل خاصی انجام میشود که به مدیریت و سازماندهی کد کمک میکند:
- یک زیرخط (_):
وقتی یک شیء با یک زیرخط شروع میشود (مثلاً _variable)، این به معنای آن است که این شیء به طور غیررسمی خصوصی است و نباید بهطور مستقیم از بیرون از کلاس یا ماژول دسترسی پیدا کند. با این حال، این فقط یک کنوانسیون است و نمیتواند مانع از دسترسی به آن شیء شود.
- دو زیرخط (__):
وقتی یک شیء با دو زیرخط شروع میشود (مثلاً __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'
در این کد، میبینید که به متغیرهایی با زیرخط تک و دوگانه دسترسی داریم، اما متغیر با دو زیرخط بهطور مستقیم از خارج از کلاس قابل دسترسی نیست.