اگر بخواهیم با پایتون برنامه نویسی شی گرا انجام دهیم، حتماً باید نحوه ایجاد کلاس در پایتون را یاد بگیریم. در این آموزش با نحوه تعریف کلاس، متدها و ویژگیهای آن در python آشنا شده و با مثال آن را بررسی میکنیم.
برنامه نویسی شی گرا به ما کمک میکند کدهای خواناتر و نزدیکتر به دنیای واقعی بنویسیم. میدانیم که کلاسها شبیه یک قالب برای اشیاء هستند. به هر نمونه از یک کلاس (Class)، شئ (Object) گفته میشود.
هر کلاس میتواند ویژگیهای مختلفی داشته باشد. به این ویژگیها state یا attribute گفته میشود. همچنین هر شی میتواند رفتارهایی از خودش نشان دهد؛ این رفتارها در کلاس با عنوان متد (method) تعریف میشوند.
برای مثال، هر کدام از ما یک نمونه (شی) از کلاس انسان هستیم. هر کدام ویژگیهای منحصر به خودمان را داریم. از رنگ پوست و ملیت گرفته تا قد، وزن و سن. همچنین همگی میتوانیم کارهایی را انجام دهیم، مثلاً راه برویم، چیزی بخوریم یا حرف بزنیم.
بر مبنای همین مثال، در ادامهی آموزش یک کلاس ساده از انسان را در پایتون پیادهسازی میکنیم.
تعریف کلاس در پایتون
فرض کنید میخواهیم کلاسی به نام Person ایجاد کنیم. این کلاس نشاندهنده موجودیت افراد در سیستم ما است.
ساختار کلی تعریف کلاس در پایتون به صورت زیر است. ابتدا کلمه کلیدی class را نوشته و سپس نام کلاس را با حرف بزرگ مینویسیم و با :
آغاز محدوده کلاس را تعیین میکنیم.
مشابه هر ساختار دیگری در پایتون، دندانه گذاری (یا فرورفتگی) کدها در ساختار کلاس دارای اهمیت است.
class person: # class body here...
برای تعریف توضیحات کلاس، توضیحات توصیفکننده را در خط اول بدنه به شکل یک رشته متنی مینویسیم؛ مثل کلاس زیر:
class Person: "represent person identity"
# class body here ....
ویژگی کلاس در پایتون
ویژگیهای یک کلاس (property) وضعیت و مقادیری مرتبط با نمونههای ایجاد شده از آن کلاس را نگهداری میکند. در حقیقت این ویژگیها متغیرهایی هستند که اطلاعات مورد نیاز را در آنها قرار میدهیم.
برای اینکه یک ویژگی کلاس در پایتون را از همان ابتدا تعریف کنیم، مشابه تعریف متغیر پایتون عمل میکنیم. به این صورت که در بدنه کلاس، نام متغیر (ویژگی) را نوشته و مقداردهی میکنیم.
class Persion:
name = None nationality = "iranian" score = 100 # some codes
البته گاهی اوقات ممکن است بنا به نیازمان، متغیری را در یکی از متدهای کلاس ایجاد کنیم. با کلمه کلیدی self که در ادامه یاد میگیریم میتوان چنین کاری انجام داد.
تعریف متدهای کلاس
متدهای کلاس در پایتون همان رفتارهای یک شی از کلاس است. برای تعریف متدها دقیقاً مشابه تعریف تابع در پایتون عمل میکنیم. یعنی پس از کلمه کلیدی def نام متد مورد نظر را نوشته و در صورت نیاز، پارامترهای ورودی آن را مشخص میکنیم.
در قطع کد زیر، من یک متد به نام say_hello()
تعریف کردم که «سلام» در خروجی چاپ میکند.
class Person: name = None score = 100 def say_hello(self):
print( "Hello!" )
دقت کنید که برای تعریف متدها در کلاسهای پایتون، میبایست حداقل یک آرگومان ورودی که معمولاً به نام self
تعریف میشود برای آن در نظر گرفت.
متغیر self در پایتون
برای اینکه در متدهای کلاس به ویژگیهای همان شئ دسترسی داشته باشیم، از self استفاده میکنیم. این مقدار به همان شئ ما اشاره کرده و میتوانیم مشابه یک شئ با آن رفتار کنیم.
در قطعه کلاس زیر، متد set_name()
را تعریف کردهایم. این متد یک ورودی از کاربر میگیرد و ویژگی name شئ را تغییر میدهد
class Person: name = None score = 100 def set_name(self, name): self.name = name
در بدنه متدهای کلاس پایتون میتوانیم پردازشهای مورد نظرمان را انجام دهیم. اجازه دهید کلاس بالا را کمی تغییر دهم. میخواهم وقتی متد set_name()
صدا زده شد، اگر نام کاربر None بود، تغییر نام انجام شود، در غیر اینصورت خطایی در خروجی چاپ کنم.
class Person: name = None score = 100 def set_name(self, name): if name == None: self.name = name else: print("You Cann't Change name Attribute!")
استفاده از کلاس در پایتون
حال که یک کلاس ساده ساختیم، میتوانیم از آن شئ (object) ایجاد کنیم. وقتی یک شی ساخته میشود، دارای id منحصر به فرد در حافظه کامپیوتر خواهد شد. بنابراین همه اشیاء از یکدیگر متمایز بوده و ویژگیهایشان با یکدیگر متفاوت است.
ساخت شی از کلاس
برای ساخت شئ از کلاس در پایتون فقط کافی است نام کلاس را به صورت یک تابع بنویسیم. مثلاً برای ساخت یک شی جدید از کلاس Person به شکل زیر عمل میکنیم:
user = Person()
با این کار، مقداری در متغیر user ذخیره میشود که به کمک آن میتوانیم به متدها و ویژگیهای شئ دسترسی داشته باشیم. اگر type()
این شئ را بررسی کنیم، نتیجهای مشابه تصویر زیر به ما برگردانده میشود:
با گذاشتن نقطه (.
) بعد از نام شئ، میتوانیم متدها و ویژگیهای آن را فراخوانی کرده و استفاده کنیم. در قطعه کدهای زیر، پس از ساخت یک نمونه از کلاس Person، نام آن را تعریف کرده و سپس مقدار ویژگی score او را چاپ کردهام.
user = Person()
user.set_name("Omid")
print( user.score )
سازنده __init__ در پایتون
زمانی که میخواهیم یک شئ از کلاس در پایتون ایجاد کنیم، یک متد فراخوانی میشود. به این متد constructor یا سازنده گفته میشود. وقتی Person()
را فراخوانی میکنیم، در حقیقت داریم متد سازنده کلاس Person را اجرا میکنیم.
اگر برای کلاسی متد سازنده تعریف نشود، مشکلی وجود ندارد. اما معمولاً از این متد برای کارهای اولیه ساخت شی از کلاس (مثل مقداردهی اولیه ویژگیها) استفاده میشود.
برای تعریف متد سازنده کلاس در پایتون به شکل زیر عمل میکنیم. سازنده زیر، سادهترین سازنده کلاس است.
ما میتوانیم برای متد __init__
آرگومانهای ورودی تعریف کنیم. مثلاً در کلاس زیر، نام و نام خانوادگی کاربر را در هنگام ساخته شدن object تنظیم میکنم.
class Person: name = None score = 100
def __init__(self, name, family): self.name = name self.family = family def say_hello(self): print("Hello", self.name)
میبینید که به کمک self میتوانیم متغیرهایی که از قبل در کلاس تعریف نشدهاند (مثل family
) را تعریف و مقداردهی کنیم. پس از مقداردهی، این متغیر در کل کلاس پایتون در دسترس خواهد بود.
وقتی بخواهیم یک شئ از این کلاس بسازیم، باید آرگومانهای ورودی آن را نیز تعیین کنیم. بنابراین برای ساخت object از کلاس بالا باید مشابه زیر عمل کرد:
user = Person("Omid", "Rajaei")
user.say_hello()
پیشنهاد میکنم همین الآن چند کلاس برای خود نوشته و چند ویژگی و متد برای آنها تعریف کنید تا نحوه تعریف و کار با کلاسها را کاملاً به خاطر بسپارید.