متغیرهای نمونه «خصوصی» که نمیتوانند به جز از داخل یک شیء به آنها دسترسی پیدا شود در پایتون وجود ندارند. با این حال، یک قرارداد وجود دارد که توسط بیشتر کد پایتون رعایت میشود: نامی که با خط زیر شروع شود (مثلاً _spam) باید به عنوان بخش غیرعمومی API در نظر گرفته شود. باید به عنوان جزئیات پیادهسازی و تغییرپذیر بدون اطلاعرسانی در نظر گرفته شود.
از آنجا که مورد استفاده معتبری برای اعضای خصوصی کلاس وجود دارد (یعنی جلوگیری از تداخل نامها با نامهای تعریف شده توسط زیرکلاسها)، پشتیبانی محدودی برای چنین مکانیزمی وجود دارد، به نام تنگنامهگذاری نام (name mangling). هر شناسه به شکل __spam (حداقل دو خط زیر ابتدایی، حداکثر یک خط زیر انتهایی) به صورت متنی با _classname__spam جایگزین میشود. این تنگنامهگذاری بدون توجه به موقعیت نحوی شناسه انجام میشود، تا زمانی که در تعریف یک کلاس رخ دهد.
تنگنامهگذاری نام برای اجازه دادن به زیرکلاسها برای بازنویسی متدها بدون شکستن فراخوانیهای متدهای درونکلاسی مفید است.
توجه کنید که قوانین تنگنامهگذاری عمدتاً برای جلوگیری از تصادفات طراحی شدهاند؛ هنوز امکان دسترسی یا تغییر متغیری که خصوصی در نظر گرفته شده وجود دارد. این حتی میتواند در شرایط خاص مفید باشد، مانند اشکالزدا.
توجه کنید که کد ارسال شده به exec() یا eval() نام کلاس فراخوانکننده را به عنوان کلاس جاری در نظر نمیگیرد.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://docs.python.org/3/tutorial