کلاس و اشیا چه هستند؟

همانطور که در مقدمات پایتون دیدید ، پایتون یک زبان شئ گرا(object oriented programming) است.

در پایتون هر چیزی که با آن سروکار داریم یک شئ است. مانند لیست ها و تاپل ها و آرایه ها و...

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

هر کلاس ویژگی هایی دارد.

نحو ایجاد یک کلاس

در پایتون کلاس ها با دستور class ایجاد میشوند که در نمونه کد زیر مثالی از آنرا مشاهده میکنیم.

class cars :
    x = 2

نمونه کد بالا یک کلاس با نام cars ایجاد کرد و متغیری در آن تعریف کرد.

نکته: به تورفتگی دستورات در کلاس توجه کنید.

 

ویژگی های یک کلاس

همانطور که میدانید کلاس ها ویژگی هایی دارند که آنهارا در کلاس ها مینویسیم و آنهارا بررسی میکنیم.

class Cars:

    brand= "BMW"
    country= "germany"
    score = 100

در نمونه کد بالا یک کلاس از ماشین را ساختیم و در آن ماشینی با برند BMW و ویژگی های دیگر آنرا نوشتیم.

برند و کشور و نمره و... همگی ویژگی هایی هستند که برای هر ماشین دیگری قابل استفاده است.

تابع __init__()

در اصل مثال هایی که در بخش های قبل دیدید در واقعیت به تنهایی کاربرد ندارند.

برای دادن ویژگی هایی به یک کلاس در اصل از تابعی بنام __init__() استفاده میشود.

 

نکته:تابع init() به‌طور خودکار هر بار که از کلاس برای ایجاد یک شیء جدید استفاده می‌شود، فراخوانی می‌شود.

 

class cars:
  def __init__(self, brand, country):
    self.brand= brand
    self.country= country

car1 = cars("BMW", "germany")

print(car1.brand)
      • در مثال بالا یک کلاس با نام cars تعریف کردیم.
      • سپس تابع __init__() را تعریف کردیم.
      • در پارامتر های این تابع ابتدا کلمه self را میگذاریم.
      • سپس پارامتر هایی که بعنوان ویژگی نیاز داریم را مینویسیم.
      • در ادامه از طریق self مقادیری را میسازیم.
      • بیرون از کلاس میتوانیم به کلاس مقدار جدیدی بدهیم و بعد آنرا پرینت کنیم.

تابع __str__()

این تابع باعث میشود که اگر ما خواستیم که از یک ویژگی کلاس پرینت بگیریم و آنرا نمایش دهیم، به طور رشته آنرا نشان دهد.

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

class cars:
  def __init__(self, brand, country):
    self.brand= brand
    self.country= country

car1 = cars("BMW", "germany")

print(car1.brand)
class cars:
    def __init__(self, brand, country):
        self.brand= brand
        self.country= country
    def __str__(self):
        return f"{self.brand}({self.country})"
car1 = cars("BMW", "germany")
print(car1)

پارامتر self چیست؟

همانطور که دیدید در ایجاد یک کلاس و استفاده از توابع آن از پارامتر self در ابتدای همه پارامتر ها استفاده میکنیم. اما دلیل اینکار چیست؟

امتر self به نمونه فعلی کلاس اشاره دارد و برای دسترسی به متغیرهایی که به کلاس تعلق دارند، استفاده می‌شود.

بدون این پارامتر به این متغیر ها دسترسی نداریم.

نکته: اگر متد هیچ آرگومانی نداشته باشد هم نوشتن self الزامی است.

 

آیا حتما باید self باشد؟

شما میتوانید اولین پارامتر تابع خود را به هر نامی بگذارید ولی اصولا آنرا با self نشان میدهند.

  def __init__(hello, brand, country):
    hello.brand= brand
    hello.country= country

 

نکته: بهتر است از خود پارامتر self استفاده کنید یا حداقل از یک نام خوب استفاده کنید که در هنگام خواندن کد ها گیج نشوید.

 

تغییر ویژگی های کلاس

برای تغییر ویژگی های یک کلاس میتوانید مانند نمونه کد زیر عمل کنید.

car1.score= 90

در نمونه کد بالا ویژگی نمره ی car1 به عدد 90 تغییر پیدا کرد.

حذف ویژگی های یک کلاس

برای حذف هر ویژگی مانند نمونه کد زیر عمل میکنیم.

del car1.score

 

نکته: در صورت اجرای این کد با خطا مواجه میشوید زیرا مقدار موردنظر شما حذف شده است.

 

حذف یک شئ

برای حذف کامل یک شئ (نه ویژگی ها) از نمونه کد استفاده میکنیم.

del car1

pass چیست؟

هرگاه یک کلاس خالی داشتید و میخواهید با خطایی رو به رو نشوید از این دستور استفاده میکنیم.

class cars:
  pass

استفاده از متد در ایتم ها

اشیاء می‌توانند شامل متدها هم باشند. متدها در اشیاء توابعی هستند که متعلق به آن شیء هستند.

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("taha", 25)
p1.myfunc()

خلاصه درس

  • پایتون زبانی شئ گرا است.
  • هرچه ما در پایتون استفاده کنیم یک شئ است.
  • کلاس ها قالب هایی از اشیا هستند که ویژگی هایی دارند.
  • میتوان ویژگی های یک کلاس را تغییر داد یا حذف کرد.

تمرین

یک کلاس با نام humans ایجاد کنید و در آن یک متغیر بسازید.



مشاهده پاسخ
توسعه دهندگان
علیرضا چمنی