در پایتون، اسم ویژگی میتونه نشون بده چطور باید ازش استفاده کنیم:
- public: اسم معمولی مثل
name؛ برای استفاده بیرون کلاس هم در نظر گرفته شده. - یک زیرخط: اسمی مثل
_noteیعنی «برای استفاده داخلی کلاس». گاهی بهش protected میگن، ولی پایتون جلوی دسترسی بیرونی رو نمیگیره. - دو زیرخط در اول: اسمی مثل
__token، بدون دو زیرخط در انتها، داخل کلاس تغییر نام میده. مثلاً در کلاسProfileبه_Profile__tokenتبدیل میشه. اسم این کار name mangling هست و کمک میکنه اسمها در ارثبری کمتر با هم تداخل داشته باشن.
این اسمگذاریها رمز رو امن نمیکنن و جلوی دسترسی به داده رو نمیگیرن. مثال زیر همین موضوع رو نشون میده. در کد خودت، از ویژگیها و متدهایی استفاده کن که برای بیرون کلاس در نظر گرفته شدن.
class Profile:
def __init__(self, name):
self.name = name
self._note = "برای استفادهٔ داخلی"
self.__token = "demo"
profile = Profile("آوا")
print(profile.name)
print(profile._note)
print(profile._Profile__token)
نامهایی مانند __init__ دو طرفشون دو زیرخط دارن و از اسمهای ویژه پایتون هستن؛ اونها رو با private اشتباه نگیر.
فعالیت شما
تفاوت قرارداد نامگذاری، name mangling و امنیت رو توضیح بده.