سلام ...

زبان پایتون یکی از قویترین زبان های شی گرای موجود هست .

پایتون یک زبان تماما شی گرا هست یعنی همه چیز توی پایتون شی محسوب میشه برای مثال رشته ها یا همون string ها و یا اعداد که ما با نام integer می شناسیمشون و یا اعداد اعشاری (float) و حتی متغیر ها و حتی خود توابع و ...

 

به خاطر همین ویژگی هست که پایتون بسیار محبوبه . مبحث شی گرایی به تازگی وارد برنامه نویسی شده ( در حدود چند سال پیش) و تا قبل از اون برنامه نویس ها به روش روال گرا و یا تابع گرا برنامه نویسی می کردند .

 

برنامه نویسی شی گرا یا OOP چیست ؟

 

برنامه نویسی شی گرا یا Object Oriented Programming که به اختصار OOP هم یهش می گن نوعی روش هست برای نوشتن کد ها به صورتی که سیستم اینترپرتر ( مفسر ) که کد ها رو اجرا می کنه اونها رو به دید یک شی ببینه . یعنی کد شما یه سری مشخصات یا Property داشته باشه و یه سری رفتار یا Method که بعدا بتونید بر اساس این مشخصات از اون استفاده کنید برای مثال :

 

ما یک شی به نام ماشین (Car) ایجاد می کنیم .

بعد بهش یه سری خصوصیت میدیم . مثلا :‌ یه ماشین ۴ تا چرخ داره . یه موتور داره . ممکنه ۴ سیلندر باشه . یه بدنه داره . یه شاسی داره و ...

حالا شی ما ساخته شده و این خصوصیت ها رو داره . حالا ما میتونیم به این ماشین خصوصیات دیگه ای رو اضافه یا کم کنیم و یا حتی از روش نمونه یا Instance بسازیم ..

 

در پایتون اشیاء رو با استفاده از کلمه کلیدی class با حروف کوچک میسازند ..

جالب اینجاست که خود کلاس ها زیرمجموعه یه کلاس درون ساخت پایتون بنام classobj هستند و یه فرزند یا Child محسوب میشن ...

توی پایتون به کلاس ها type هم میگن ...

 

 

شما میتونید یک کلاس رو به شکل زیر در پایتون تعریف کنید ...

                                                                                                                                                                        

class example :
         pass

کلاس ها میتونند از کلاس ها و اشیاء دیگه هم ارث بری کنند یعنی یه کلاس میتونه هم مشخصات خودش رو داشته باشه و هم مشخصات یه کلاس دیگه رو . هر کلاس نهایتا میتونه به تنهایی فقط از یه کلاس ارث بری کنه البته به شرطی که اون کلاس از قبل وجود داشته باشه .. در اینصورت میگیم کلاس ما فرزند کلاس پدرش هست :‌دی

شما یه صورت زیر میتونید کاری کنید که کلاستون از یه کلاس دیگه ارث بری کنه ... : 

class child (parent) :

        pass

 

همونطوری که گفتم کلاس ها دارای یه سری خصوصیات و رفتار هستند ... به متد های کلاس ها توابع کلاسی هم میگن یا اصطلاحا متد های محصور شده یا Bound method ...

این متد ها در واقع همون توابع هستند که همیشه استفاده می کنیم با این تفاوت که یه آرگومان اضافی هست که همیشه می گیرن. اون آرگومان کلمه رزرو شده self هست . این کلمه اشاره به خود کلاس داره و وقتی تابع این آرگومان رو به عنوان اولین آرگومانش می گیره یعنی این تابع یه متد متعلق به این کلاس هست .

مثال زیر رو ببینید :‌


class example :
        def mymethod(self):
                pass

نکته بعدی درباره متغیر های کلاسی که اصطلاحا یهشون field هم میگن هست . این متغیره دقیقا درون یدنه خود تابع و نه درون متد ها تعریف میشن و تنها فرقشون با سایر متغیره ها اینه که فقط داخل بدنه کلاس تعریف شدند ... و فقط موقعی که به صورت dot notation یا نشانه گذاری نقطه ای به همراه اسم کلاس و اسم شی نمونه کلاس بیان قابل دست یابی هستند .. در آخر مقاله همه راه های فراخوانی کلاس ها رو براتون مثال زدم ... :‌دی

مثال :

 

class example :
        mystr = "Hello World"
        myint = 234
        myfloat = 42.535455
        mynone = None
        mylist = list()
        mydict = dict()
        mytuple = tuple()


راستی یه چیزی بگم این کلمه pass که من داخل بلاک های کد دیدید میزارم به این خاطره که پایتون یه خورده توی مساپلی مثل خالی گذاشتم بلاک های expression یا عبارت ها سخت گیره و اگه مثلا بلاک class یا def یا with یا if یا else یا ... رو بدون اینکه هیچی توش بنویسید خالی بزارید ایراد میگیره : دی

 

درباره Attribute ها در کلاس های پایتون

 

پایتون یه سری شناسه ها یا اصطلاحا Atribute داره درون ساختی هستند و خیلی خیلی خیلی کاربرد دارن و لازم حداقل چندتاشون رو بلد باشید ..

این شناسه ها دقیقا مثل همون متد ها هستند فقط قبل و بعد نامشون دوتا زیر ـ یا Under Score میخوره همین . شما با این شناسه ها کار های جالبی می تونید بکنید . در ضمن نام دیگه شناسه ها Attribue Method یا به قول زبان فارسی شناسه های متد نام (‌از خودم اختراع کردم :‌دی ) هست :

 

class example :
        def __init__(self):                                  
                pass    # زمانی که شما کلاس رو فراخوانی می کنید محتوای این بلاک هم اجرا میشه و مخفف Initialize هست
        def __delete__(self):
                print "I'm going down : d"    # زمانی که عملیات Garbage collection پایتون اتفاق می افته این بخش هم اجرا میشه
        def __str__(self):
                return "In the name of god"    # زمانی که نمونه کلاس یا خود کلاس رو میخواید با دستور پرینت چاپ کنید این بخش اجرا میشه
        def __eq__(self, other):
                return self.mth == other.    # زمانی که کلاس خودمون رو با چیز دیگه ای با عبارت == مقایسه میکنیم اجرا میشه
        def __lt__(self, other):
                return self.mth < other.mth    # زمانی که کلاسمون رو با عبارت > با شی دیگه ای مقایسه می کنیم
        def __ne__(self, other):
                return self.mth != other.mth # زمانی که کلاسمون رو با عبارت != با شی دیگه ای مقایسه می کنیم اجرا می شه
        def __gt__(self, other):
                return self.mth > other.mth    # زمانی که کلاسمون رو با عبارت > مقایسه می کنیم اجرا میشه
        def __ge__(self, other):
                return self.mth >= other.mth     # زمانی که کلاسمون رو با عبارت >= با شی دیگه ای مقایسه می کنیم اجرا میشه

 

شناسه های بسیار زیادی برای کلاس های پایتون وجود داره و شما میتونید با یکم سرچ اونها رو پیدا کنید و یاد بگیرید

__eq__ --> equal

__lt__ --> less than

__gt__ --> greater than

__ge__ --> grater than or equal

__ne__ --> not equal

__init__ --> initialize

__str__ --> string

مثال ها : در پایین

class example :
        myscore = 34897
        myname = "Kianoush"

        def __init__(self, name, site):
                # This method should return None
                print("Initializing ...")
                print("Welcome to my program")
                print(name,"'s site is : ", site)
                self.name = name
                self.site = site
        def __str__(self):
                return "This is my string for you : d"   
        def kianoush(self, x):       
                print(x**2)
        def args(self):
                print(self.name, self.site)
ex = example("Kianoush", "webcodes.rozblog.com")
print(ex)
ex.kianoush(10)
ex.args()
________________________________________ after interpreted . in below

Initializing ...
Welcome to my program
Kianoush 's site is :  webcodes.rozblog.com
This is my string for you : d
100
Kianoush webcodes.rozblog.com

این رو بدونید هر آرگومانی که متد __init__ بگیره خود کلاس موقع فراخوانی هم می گیره مثل زیر :

class example:
        def __init__(self, arg1, arg2, arg3):
                print(arg1, arg2, arg3)

ex = example("Hello", "My", "World")

----------------------------------------------------------------------------

Hello My World

راستی میتونید متد ها و فیلد ها (‌متغیر های کلاسی ) رو به صورتی بنویسید که بهش میگن روش (Private)

یعنی کاری کنید متد ها و فیلد ها فقط از درون خود کلاس قابل دسترسی باشند . برای اینکار کافیه فقط قبل از نام متغیر یا خود متد دوتا آندر اسکور __ قرار بدید مثل زیر :

class example:
        __myvar = "Some string"

        def __mymethod(self):
                return "Some things"

البته بیرون از کلاس هم میشه بهشون دسترسی داشت منتها به یه صورت دیگه مثل زیر :

_example__myvar

_example__mymethod

خداحافظ ...

اطلاعات مطلب
نویسنده :

admin

❤️ امتیازات این مطلب : 0
تعداد بازدید : 140
ارسال شده در تاریخ یکشنبه 17 بهمن 1395 و ساعت 17:24
دسترسی بیشتر (ابزارهای مطلب)
نوع فونت متن :
اندازه فونت متن : (اندازه متن)
رنگ متن : (مقدار هگزادسیمال رنگ)

لینک این مطلب را در سایت خود قرار دهید :
تعداد حروف بکار رفته در متن :
اشتراک گذاری :