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

پایتون یک زبان شی گراست. لذا کلاس ها و اشیا در پایتون یک اصل اساسی هستند. هر چیزی در پایتون یک شی است که یک سری خاصیت و متد دارد. یک کلاس شبیه سازنده‌ی یک شی است و همانند یک طرح اولیه برای ساخت اشیا عمل می‌کند.

ایجاد کلاس در پایتون

برای این که بتوانیم یک شی در پایتون ایجاد کنیم ابتدا باید کلاس مورد نظر را ایجاد کنیم.برای ایجاد کلاس در پایتون از کلمه‌ی کلیدی class استفاده می‌شود. ساختار نحوی تعریف کلاس در پایتون به صورت زیر است:

class MyClass:
    statments
    .....
    ......

در مثال زیر یک کلاس تعریف کرده ایم که تنها یک خاصیت دارد.

class MyClass:
  x=5

ایجاد اشیا در پایتون

برای ایجاد اشیا در پایتون ابتدا باید کلاس مورد نظر را تعریف کنیم سپس با استفاده از نام کلاس و قرارداد یک جفت پارانتز باز و بسته و انتساب آن به یک متغیر می‌توانیم یک شی از کلاس مورد نظر ایجاد نمائیم.

در مثال زیر یک شی با استفاده از کلاس تعریف شده در مثال قبل ایجاد کرده و خاصیت x را چاپ کرده‌ایم.

p1 = MyClass()
print(p1.x)
>>> ۵

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

تابع __init__ در پایتون

کلاس‌هایی که در مثال‌های بالا تعریف شد ساده‌ترین نوع ممکن کلاس در پایتون هستند. این نوع کلاس‌ها در چرخه‌ی توسعه‌ی نرم و طراحی و توسعه‌ی وب سایت واقعی مفید نیستند.

برای استفاده صحیح از کلاس‌ها در پایتون باید نحوه‌ی استفاده از تابع ‌__init__ را در پایتون بلد باشید تا بتوانید از کلاس‌ها و شی گرایی در پایتون به درستی استفاده نمائید.

هر کلاس در پایتون یک تابع __init__ دارد. این تابع موقع ایجاد اشیا اجرا می‌شود و معمولا مقادیر اولیه و برخی تنظیمات مورد نیاز را مقدار دهی می‌کند.

در کلاس زیر با استفاده از تابع __init__ نام و سن شخص در بدو ساخت شی مورد نظر مقدار دهی می‌شود.

>>> class Person:
...     def __init__(self, name, age):
...             self.name=name
...             self.age = age
... 
>>> p1 = Person('amir',32)
>>> print(p1.name)
amir
>>> print(p1.age)
۳۲

وقتی یک شی ایجاد می‌شود تابع __init__ به طور خودکار اجرا می‌گردد.

توابع اشیا در پایتون

اشیا در پایتون می‌تواند شامل توابعی باشد.

در مثال زیر کلاس person یک تابع دارد که موقع فراخوانی کدهای محتویات تابع تعریف شده در کلاس متناظر جرا می‌گردد.

>>> class person:
...     def __init__(self,name,age):
...             self.name = name
...             self.age = age
...     def myfunc(self):
...             print('Hello my name is ' + self.name)
... 
>>> p1 = person('amir', 32)
>>> p1.myfunc()
Hello my name is amir

پارامتر self یک ارجاع به نمونه‌ی جاری از کلاس مورد نظر است و برای دستیابی با متغیرها و توابع یک کلاس در داخل همان کلاس استفاده می‌گردد.

self در پایتون

پارامتر self یک ارجاع به نمونه‌ی جاری از کلاس مورد نظر است و برای دستیابی با متغیرها و توابع یک کلاس در داخل همان کلاس استفاده می‌گردد.

نام این پارامتر اختیاری است و شما می‌توانید هر نامی برای این پارامتر انتخاب نمائید. اما توجه کنید که پایتون اولین پارامتر را در توابع داخل کلاس به شی ایجاد شده از کلاس مورد نظر اشاره می‌کند.

>>> class Person:
...     def __init__(myself , name , age):
...             myself.name = name
...             myself.age = age
...     def myfunc(abc):
...             print('Hello I am ' + abc.name)
... 
>>> p1 = Person('amir', 32)
>>> p1.myfunc()
Hello I am amir

تعریف خاصیت برای اشیا در پایتون

در پایتون می‌توان بعد از ایجاد و حین اجرا خصوصیاتی را به اشیا اضافه کرده و آنها را تغییر دهید.

در ادامه‌ی مثال فوق به مثال زیر توجه نمائید:

>>> p1.age1 = 2
>>> print(p1.age1)
۲
>>> p1.age=40
>>> print(p1.age)
۴۰

در این مثال یک متغیر به نام age1 به کلاس شخص که در مثال قبل تعریف کرده بودیم اضافه کردیم و خاصیت aeg را به ۴۰ تغییر دادیم.

حذف متغیرهای کلاس در پایتون

با استفاده از کلمه کلیدی del می‌توانید خاصیت مورد نظر را از اشیا حذف نمائید. به مثال زیر توجه نمائید:

>>> del p1.age
>>> print(p1.age)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Person' object has no attribute 'age'

در این مثال خاصیت age را از شی شخص که در مثال قبل تعریف کردیم حذف کرده ایم.

حذف یک شی در پایتون

با استفاده از کلمه‌ی کلیدی del می‌توانید یک شی را بعد از ایجاد حذف نمائید.

در مثال زیر شی p1 را که با استفاده از کلاس شخص ایجاد کرده بودیم حذف کردیم.

>>> del p1
>>> print(p1.name)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'p1' is not defined

دستور Pass در پایتون

همانند توابع در پایتون تعریف کلاس‌ها نمی‌تواند خالی و بدون دستور باشد. به عبارتی برای این که یک کلاس در پایتون هیچ کاری انجام ندهد باید از دستور pass استفاده نمائید.

class Person:
  pass

منبع:w3school

دیدگاه خود را بنویسید