Kahibaro
Discord Login Register

کلاس‌ها و اشیاء

درک عملی «کلاس» و «شیء» در پایتون

در این بخش فرض می‌کنیم قبلاً ایدهٔ کلی برنامه‌نویسی شی‌گرا را گرفته‌اید و اینجا می‌خواهیم خیلی مشخص ببینیم:

یادتان باشد اینجا هنوز وارد جزئیات متد __init__، وراثت و … نمی‌شویم؛ آن‌ها در بخش‌های بعدی فصل می‌آیند.


کلاس به عنوان «الگو» (یا نقشهٔ ساخت)

یک شکل ساده برای فهم کلاس:

برای نمونه:

در پایتون، کلاس معمولاً با کلمهٔ کلیدی class تعریف می‌شود. یک مثال خیلی ساده:

class Dog:
    pass

این کد فقط یک کلاس به نام Dog تعریف می‌کند که فعلاً هیچ‌کاری نمی‌کند (pass یعنی «فعلاً خالی بمان»).

در اینجا:

شیء (Object) چیست؟

وقتی می‌گوییم «پایتون کاملاً شی‌گراست»، یعنی خیلی چیزهایی که استفاده می‌کنید خودشان شیء هستند:

هر شیء:

ساختن شیء از روی کلاس (نمونه‌سازی / instantiation)

وقتی یک کلاس خودمان تعریف کنیم، می‌توانیم از روی آن، مثل «ساختن یک چیز جدید»، شیء بسازیم. به این کار معمولاً می‌گوییم:

مثال:

class Dog:
    pass
dog1 = Dog()
dog2 = Dog()

اینجا:

نکته: Dog (بدون پرانتز) نام کلاس است، Dog() (با پرانتز) یعنی «بساز یک شیء جدید از این کلاس».


تفاوت «کلاس» و «شیء» در نگاه کدنویسی

خلاصهٔ تفاوت‌ها:

مثال ساده‌تر:

class Person:
    pass
ali = Person()
mina = Person()

افزودن داده (خصوصیت/ویژگی) به اشیاء

فعلاً بدون ورود به متد __init__، می‌توانیم بعد از ساختن شیء، به آن ویژگی اضافه کنیم. این کار بیشتر برای فهم اولیه‌ است، بعدها نحوهٔ اصولی‌تر را می‌بینید.

class Person:
    pass
person1 = Person()
person2 = Person()
person1.name = "Ali"
person1.age = 20
person2.name = "Sara"
person2.age = 25
print(person1.name, person1.age)  # Ali 20
print(person2.name, person2.age)  # Sara 25

چیزهای مهم در این مثال:

این نوع ویژگی‌ها را معمولاً «ویژگی نمونه» یا «Instance Attribute» می‌گویند؛ یعنی به هر نمونه (شیء) تعلق دارند، نه به کل کلاس به طور مشترک.


مثال: کلاس «کتاب» و اشیاء آن

یک مثال ملموس‌تر:

class Book:
    pass
book1 = Book()
book2 = Book()
book1.title = "یادگیری پایتون"
book1.author = "نویسنده الف"
book2.title = "مقدمات برنامه‌نویسی"
book2.author = "نویسنده ب"
print(book1.title, "-", book1.author)
print(book2.title, "-", book2.author)

خروجی چیزی شبیه این خواهد بود:

یادگیری پایتون - نویسنده الف
مقدمات برنامه‌نویسی - نویسنده ب

اینجا:

نوع (type) اشیاء ساخته‌شده از کلاس

همان‌طور که type(5) می‌شود int، برای شیءهای ساخته‌شده‌ی خودمان هم type(...) کلاس‌شان را نشان می‌دهد:

class Dog:
    pass
dog1 = Dog()
dog2 = Dog()
print(type(dog1))
print(type(dog2))

خروجی (تقریباً) چیزی شبیه این خواهد بود:

<class '__main__.Dog'>
<class '__main__.Dog'>
print(type(dog1) == Dog)  # True

چرا چند شیء از روی یک کلاس مفید است؟

علت اصلی استفاده از کلاس و شیء همین است: تعریف یک الگو، و ساختن چندین نمونه مختلف طبق آن.

مثلاً:

می‌توانید:

  1. یک کلاس Student تعریف کنید.
  2. برای هر دانش‌آموز یک شیء Student بسازید.
  3. مثلاً همه را در یک لیست جمع کنید.

نمونه:

class Student:
    pass
s1 = Student()
s1.name = "Ali"
s1.age = 16
s2 = Student()
s2.name = "Sara"
s2.age = 17
students = [s1, s2]
for student in students:
    print(student.name, "-", student.age)

بعداً در متدها و __init__ خواهید دید چطور می‌شود این کار را منظم‌تر و کوتاه‌تر انجام داد؛ اما در حال حاضر هدف این است که بفهمید:

کلاس به عنوان «نوع دادهٔ جدید»

می‌توانید کلاس را این‌طور هم ببینید:

مثال:

class Person:
    pass
p1 = Person()
p2 = Person()
print(isinstance(p1, Person))  # True
print(isinstance(5, Person))   # False

تابع isinstance (که قبلاً با آن آشنا شده‌اید یا در فصل توابع/کتابخانه‌ها خواهید دید) بررسی می‌کند که:

پس کلاس در واقع نوع (Type) جدیدی تعریف می‌کند که اشیائش (نمونه‌هایش) از آن نوع هستند.


نام‌گذاری کلاس‌ها و اشیاء

چند قرارداد ساده و مهم:

این فقط قرارداد است، نه اجبار. ولی رعایت آن:

تمرکز روی استفادهٔ روزمره: ساختن و استفاده از کلاس ساده

بیایید یک مثال کمی بزرگ‌تر ولی همچنان ساده را ببینیم که در آن:

class BankAccount:
    pass
acc1 = BankAccount()
acc2 = BankAccount()
acc1.owner = "Ali"
acc1.balance = 1000
acc2.owner = "Sara"
acc2.balance = 5000
print("حساب ۱:", acc1.owner, "-", acc1.balance)
print("حساب ۲:", acc2.owner, "-", acc2.balance)

چیزی که باید از این مثال در ذهن بماند:

در بخش «ویژگی‌ها و متدها» و «متد __init__» خواهید دید که:

جمع‌بندی مفهومی

نکات کلیدی این بخش:

  1. کلاس یک الگو / نوع دادهٔ جدید / طرح کلی است.
  2. شیء (instance) یک نمونهٔ واقعی ساخته شده از آن کلاس است.
  3. از یک کلاس می‌توان چندین شیء مختلف با داده‌های متفاوت ساخت.
  4. روی هر شیء، با علامت .:
    • می‌توانیم ویژگی (Attribute) بسازیم و مقدار بدهیم.
    • بعداً متدها را هم صدا می‌زنیم (در بخش‌های بعدی).
  5. کلاس = تعریف «چه چیزهایی این نوع دارد و چه کارهایی می‌تواند بکند»،
    شیء = «یکی از آن چیزها» با داده‌های مشخص خودش.

در ادامهٔ فصل، خواهید دید:

Views: 6

Comments

Please login to add a comment.

Don't have an account? Register now!