خب ادامه حالت هارو هم بگم تا نصفه ولش نکنیم 😀
خب حالت چهارم یکمی از سادگی خارج میشه و وارد بحث شی گرایی میشه! از الان بگم !
4️⃣ حالت چهارم شما دوتا underscope قبل اسم میزاری (که بهش میگن double underscope یا بین برنامه نویسا جا افتاده dunder) یعنی متغیر name__ رو میخونیم داندر نِیم
حالا جدا از اسمش ، این یکی دقیقا چیکار میکنه برامون؟ اینو کلا باید با مثال برم جلو🤓
فرض کنید ما دوتا کلاس داریم که یکی از کلاس ها از اون یکی ارث بری میکنه :
اگه به کلاس های بالا نگا کنید توی جفتشون یه فیلد name داریم ، و چون کلاس teacher از human ارث بری میکنه و داخل خودش صداش میزنه دوتا فیلد name باهم قاطی میشن🥲
اونوقت ما چجوری میتونیم به جفتشون دسترسی داشته باشیم؟
اینجاست که dunder میاد وسط و مثال بالا رو تغییر میدیم:
شاید بگید خب الانم که اسماشون باز شبیه همه، ولی داندر داره! اینجاست که پایتون میگه من دخالت میکنم و اسامی که به صورت dunder دار نوشته شدن رو تغییر میدم😎
بیاید یه شی بسازیم و ببنیم توش چیه :
میبیند که با اضافه کردن dunder پایتون کلا اسم پراپرتی رو عوض کرد و اسم کلاس رو اولش چسبوند. اینجوری خیلی راحت از هم تفکیک میشن😁
5️⃣ و آخرین حالتم زمانیه که شما یه dunder اول اسم میزارید و یدونه هم اخر اسم
که میشه مثل __init__ که بهش میگن magic method و خود مفسر پایتون کاری به این نوع اسم گذاریتون نداره و فقط برای خوانایی کده! یعنی خودتون تصمیم میگیرد فلان تابع رو اینجوری تعریف کنید برای فلان کار (یعنی برای یه کار خاص رزروش کنید و بدونید خارج از اونجا هم کاری باهاش ندارید و فقط برای یه کاره)
مثلا همین __init__ رو وقتی داخل یه کلاس صدا میزنید یعنی تابع سازنده رو صدا زدید و میدونید که این تابع هم خارج از خود کلاس به کار نمیاد و فقط رزرو شده برای سازنده بودن!
در اخرم باید بگم برای سنیور شدن حتما این چیزا رو رعایت کنید. هم برای درک خودتون خوبه هم برای بقیه برنامه نویسایی که کدتونو نگا میکنن✨
دیگه کوتاه تر از این نمیتونستم بکنم.
روز خوبی داشته باشید💓
#پست_پیشنهادی
#part2
#python #underscope #oop
☕️ @CodeExplore
خب حالت چهارم یکمی از سادگی خارج میشه و وارد بحث شی گرایی میشه! از الان بگم !
حالا جدا از اسمش ، این یکی دقیقا چیکار میکنه برامون؟ اینو کلا باید با مثال برم جلو
فرض کنید ما دوتا کلاس داریم که یکی از کلاس ها از اون یکی ارث بری میکنه :
class Human():
def __init__(self):
self.sex = 'male'
self.name = 'karim'
class Teacher(Human):
sef __init__(self):
super().__init__()
self.count = 2
self.name = 'math'
اگه به کلاس های بالا نگا کنید توی جفتشون یه فیلد name داریم ، و چون کلاس teacher از human ارث بری میکنه و داخل خودش صداش میزنه دوتا فیلد name باهم قاطی میشن
اونوقت ما چجوری میتونیم به جفتشون دسترسی داشته باشیم؟
اینجاست که dunder میاد وسط و مثال بالا رو تغییر میدیم:
class Human():
def __init__(self):
self.sex = 'male'
self.__name = 'karim'
class Teacher(Human):
sef __init__(self):
super().__init__()
self.count = 2
self.__name = 'math'
شاید بگید خب الانم که اسماشون باز شبیه همه، ولی داندر داره! اینجاست که پایتون میگه من دخالت میکنم و اسامی که به صورت dunder دار نوشته شدن رو تغییر میدم
بیاید یه شی بسازیم و ببنیم توش چیه :
t1 = Teacher()
dir(t1)
# ['_Human__name', '_Teacher__name', 'sex', 'count']
میبیند که با اضافه کردن dunder پایتون کلا اسم پراپرتی رو عوض کرد و اسم کلاس رو اولش چسبوند. اینجوری خیلی راحت از هم تفکیک میشن
که میشه مثل __init__ که بهش میگن magic method و خود مفسر پایتون کاری به این نوع اسم گذاریتون نداره و فقط برای خوانایی کده! یعنی خودتون تصمیم میگیرد فلان تابع رو اینجوری تعریف کنید برای فلان کار (یعنی برای یه کار خاص رزروش کنید و بدونید خارج از اونجا هم کاری باهاش ندارید و فقط برای یه کاره)
مثلا همین __init__ رو وقتی داخل یه کلاس صدا میزنید یعنی تابع سازنده رو صدا زدید و میدونید که این تابع هم خارج از خود کلاس به کار نمیاد و فقط رزرو شده برای سازنده بودن!
در اخرم باید بگم برای سنیور شدن حتما این چیزا رو رعایت کنید. هم برای درک خودتون خوبه هم برای بقیه برنامه نویسایی که کدتونو نگا میکنن
دیگه کوتاه تر از این نمیتونستم بکنم.
روز خوبی داشته باشید
#پست_پیشنهادی
#part2
#python #underscope #oop
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡13❤🔥9🔥6
#python #underscope #learnpython #python_tricks #python_tips
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20❤🔥12⚡8