خط زیر خط اول: “_var”
وقتی به نام متغیرها و متدها میرسد، پیشوند واحد under score فقط بر اساس قرارداد معنی دارد. این یک اشاره به برنامه نویس – به این معنی است که جامعه پایتون با آن موافق است پیشوند زیر خط به عنوان یک اشاره به برنامه نویس دیگر است که متغیر یا روشی در نظر گرفته شده است که با یک زیرخط شروع می شود برای استفاده داخلی این قرارداد در PEP 8، رایج ترین راهنمای سبک کد پایتون، تعریف شده است. با این حال، این قرارداد توسط مفسر پایتون اجرا نمی شود. معنی دارد، اما بر رفتار برنامه های شما تأثیر نمی گذارد. متغیرهای عمومی مانند جاوا.اضافه کردن یک خط زیر خط در جلو پایتون تمایز قوی بین “خصوصی” و نام یک متغیر بیشتر شبیه کسی است که یک علامت هشدار کوچک در زیر خط قرار می دهد که می گوید: “هی، این واقعاً قرار نیست بخشی از به مثال زیر دقت کنید:class Test: رابط عمومی این کلاس بهتر است آن را به حال خود رها کنید.» self.foo = 11 self._bar = 23اگر این کلاس را نمونه سازی کنید و سعی کنید به آن دسترسی پیدا کنید، چه اتفاقی می افتد ویژگی های foo و _bar که در سازنده init آن تعریف شده است؟ بیایید دریابیم:>>> t = Test() def __init__(self): >>> t.foo >>> t._bar 23همانطور که می بینید، خط زیر خط پیشرو در _bar مانع نشد 11 ما از «دستیابی به» کلاس و دسترسی به مقدار آن متغیر متغیر. این به این دلیل است که پیشوند زیر خط در پایتون صرفاً یک پیشوند است نام روش ها با این حال، زیرخط های پیشرو بر نحوه نام ها تأثیر می گذارد از ماژول ها وارد شوند. تصور کنید کد زیر را در a دارید قرارداد مورد توافق – حداقل در مورد متغیر و ماژولی به نام my_module: def external_func(): # my_module.py: return 23return 42حال، اگر از یک import wildcard برای وارد کردن همه نامها از آن استفاده کنید ماژول، پایتون نامهایی را با زیرخط اصلی وارد نمیکند (مگر اینکه ماژول یک لیست all تعریف کند که این رفتار را لغو کند.>>> from my_module import * def _internal_func(): >>> external_func() >>> _internal_func() 23 NameError: “name ‘_internal_func’ is not defined”به هر حال، باید از وارد کردن حروف عام اجتناب شود، زیرا مشخص نمیکند کدام نامها در فضای نام وجود دارند. به منظور شفافیت به واردات منظم. بر خلاف واردات عام، واردات معمولی تحت تأثیر نامگذاری زیرخط اصلی قرار نمیگیرد. قرارداد:>>> my_module.external_func() >>> import my_module >>> my_module._internal_func() 23 42می دانم که در این مرحله ممکن است کمی گیج کننده باشد.
قوانین ارسال دیدگاه در سایت