بنام خدا
بهنام صباغی هستم در خدمتتون هستم با اخرین جلسه از اموزش پایتون توی این جلسه میخوام کد زدن کلاس ها و ساخت ابجکت ها و یه سری چیز های مربوط به توابع رو بهتون درس بدم
ساخت کلاس توی پایتون با کلمه ی کلیدی class انجام میشه و هر کلاس یه نام داره و یه سری صفات و یه سری توابع بذارید موضوع رو با تعریف یک کلاس ساده بگم

class circle:
    __pi=31.4
    def __init__(self,c,r):
        self.c = c
        self.r = r
    def s(self):
        return (self.r**2)*self.__pi
    def p(self):
        return (self.r*2)*self.__pi


c = circle(5,12)
print(c.s())
print(c.p())
print(c.r)
print(c.__pi)


خب اولش رو که گفتم حالا میرسیم به بعدش اولین متغیری که من تعریف کردم
__pi
هستش اون دوتا اندراسکوری که اولشه ( __ ) به این معنیه که این متغیر از نوع privat هستش یعنی من از بیرون تابع نمیتونم بهش دسترسی داشته باشم این برای جاهایی بکار میاد که شما نمیخواید متغیر هاتون بیرون کلاس استفاده بشند البته اینم توی پرانتز بگم که معمولا همه ی متغیر ها رو توی کلاس از نوع پرایویت تعریف میکنند و برای هر متغیر دوتا تابع به تام های set  و  get مینویسند که خیلی توابع سده ای هستند و کارشون اینه تابع set به ازای یک مقدار ورودی متغیرمون رو برابر اون مقدار قرار میده و تابع get هم مقدار متغیرمون رو برمیگردونه دقت داشته باشید تابع set  و get اخل کلاسم هستند و به متغیر های خصوصی یا همون پرایویت دسترسی دارند و میتونند اونو بخونند و یا حتی مقدارش رو تغییر بدند بهتره شما هم عادت کنید به این نوع استفاده چون توی برنامه های شیگرا خیلی بهتون کمک میکنه و ممکنه مثلا یک کلاس رو که من اینجا نوشتم جای دیگه هم استفاده کنم اگر با get  و set پیش رفته باشید هیچ نیازی نیست دوباره کد کلاستون رو بخونید و جاهایی که نیاز به تغییر داره رو تغییر بدم بلکه با تابع set میتونم بدون تغییر در کد تابع دوباره با مقادیر جدید ازشون استفاده کنم خب بگذریم
در ادامه شما تابع __init__ رو میبینید این تابع سازنده ی کلاس هست یعنی وقتی شی ساخته میشه اولین تابع که اجرا میشه این تابع هست معمولا ازش برای مقدار دهی های اولیه استفاده میشه و کارهایی که لازمه به محض ساخت یک شی انجام بشه و نکته ی بعدی این که هر تابعی توی کلاس نوشته میشه باید یه ورودی self داشته باشه و بعد اون میتونید مقادیری که میخواید رو بذارید و نکته ی بعدی این که ورودی هایی که به تابع init تون میدید همون ورودی هاییه که موقع ساختن شی کاربر باید وارد کنه
و بعد از اون یک تابع s برای مساحت و یک تابع p برای محیط تعریف کردم که کارهایی که میکنند مشخصه بعد از تعریف کلاسم میبینید که یک شی ازش تعریف کردم
c = circle(5,12)
همون طور که میبینید یک نام گذاشتم و اون رو مساوی نام کلاسم بعلاوه یک پرانتز و دو ورودی قرار دادم حالا این دوتا ورودی همون ورودی های تابع init هستند (البته بجر self که توضیح دادم)
بعد من توابع شی ء خودم رو فراخوانی کردم و پرینتشون کردم چون مقدار بر میگردونند و در اخر میبینید من سعی کردم متغیر
__pi
 رو که یک متغیر پرایویت هست چاپ کنم اگر شما این کد رو اجرا کنید میبینید که بعد از پرینت مقادیر مساحت و محیط و شعاع دایرم رو چاپ کردم یه ارور بهم میده
Traceback (most recent call last):
  File "/home/fonqri/test1.py", line 16, in <module>
    print(c.__pi)
AttributeError: 'circle' object has no attribute '__pi'
میگه ابجکت ساخته شده صفت
__pi
رو نداره
حالا اگر بخوایم یک کلاس بسازیم که از کلاس دیگمون ارث ببره چطور عمل میکنیم ؟ جواب خیلی سادست زمان تعریف کلاس دقیقا مثل توابع جلوش پرانتز باز میکنید و کلاس هایی که قراره ازشون به ارث ببره رو مینویسد به همین سادگی بعد میتونید از مواد داخل کلاسی که ازش به ارث بردیم استفاده کنیم و فرض کنید من میخوام یک کلاس دایره های رنگی ایجاد کنم خیلی راحت اینجوری عمل میکنم
class circle:
    __pi=31.4
    def __init__(self,c =0,r =5 ):
        self.c = c
        self.r = r
    def s(self):
        return (self.r**2)*self.__pi
    def p(self):
        return (self.r*2)*self.__pi


c = circle(5,12)
print(c.s())
print(c.p())
print(c.r)

class color_circle(circle):
    __color='red'
    def set_color(self,color):
        self.__color=color
    def get_color():
        return self.__color

cc=color_circle()
print(cc.s())
دیگه حس توضیح ندارم خودتون ببینید چی میشه توش دیگه قسمت اولش همون قسمت قبلی هست که توضیح دادم بقیشم خیلی سادست
خب اینجا شیگرایی پایتون رو هم به پایان بردم