تمرین‌های شی‌ءگرایی در پایتون

تمرین‌های عملی OOP از ساده تا متوسط با پاسخ

در درس‌های قبلی با مفاهیم اصلی برنامه‌نویسی شی‌ءگرا در پایتون آشنا شدیم. حالا وقت آن است که این مفاهیم را با تمرین‌های عملی تثبیت کنیم.

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

مفاهیمی که در این تمرین‌ها استفاده می‌کنیم:
  • Class
  • Object
  • __init__
  • Method
  • Inheritance
  • Encapsulation
  • Polymorphism

تمرین ۱: ساخت کلاس Student

یک کلاس به نام Student بسازید.

این کلاس باید دو ویژگی داشته باشد:

  • name
  • age

سپس یک متد به نام show_info() ایجاد کنید که اطلاعات دانش‌آموز را نمایش دهد.

پاسخ

class Student:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show_info(self):
        print("Name:", self.name)
        print("Age:", self.age)


student1 = Student("Ali", 20)

student1.show_info()

تمرین ۲: کلاس حساب بانکی

یک کلاس به نام BankAccount بسازید.

موجودی حساب باید به صورت یک ویژگی خصوصی __balance ذخیره شود.

دو متد ایجاد کنید:

  • deposit() برای افزایش موجودی
  • get_balance() برای نمایش موجودی

اجازه ندهید مقدار واریزی صفر یا منفی باشد.

پاسخ

class BankAccount:

    def __init__(self, balance):
        self.__balance = balance

    def deposit(self, amount):

        if amount > 0:
            self.__balance += amount
        else:
            print("Invalid amount")

    def get_balance(self):
        return self.__balance


account = BankAccount(1000000)

account.deposit(500000)

print(account.get_balance())

تمرین ۳: وراثت

یک کلاس والد به نام Person ایجاد کنید.

این کلاس باید ویژگی name داشته باشد.

سپس کلاس Student را از آن ارث‌بری دهید و ویژگی student_id را به آن اضافه کنید.

پاسخ

class Person:

    def __init__(self, name):
        self.name = name


class Student(Person):

    def __init__(self, name, student_id):
        super().__init__(name)
        self.student_id = student_id


student = Student("Ali", 101)

print(student.name)
print(student.student_id)

تمرین ۴: بازنویسی متد

یک کلاس به نام Animal ایجاد کنید که متدی به نام speak() داشته باشد.

سپس دو کلاس Dog و Cat ایجاد کنید که از Animal ارث‌بری کنند.

متد speak() را در هر دو کلاس بازنویسی کنید.

پاسخ

class Animal:

    def speak(self):
        print("Animal sound")


class Dog(Animal):

    def speak(self):
        print("Woof")


class Cat(Animal):

    def speak(self):
        print("Meow")


dog = Dog()
cat = Cat()

dog.speak()
cat.speak()

تمرین ۵: چندریختی

سه کلاس به نام‌های Car، Motorcycle و Truck ایجاد کنید.

هر کلاس باید متدی به نام move() داشته باشد که پیام مخصوص همان وسیله را نمایش دهد.

سپس Objectها را داخل یک لیست قرار دهید و با یک حلقه متد move() را اجرا کنید.

پاسخ

class Car:

    def move(self):
        print("Car is moving")


class Motorcycle:

    def move(self):
        print("Motorcycle is moving")


class Truck:

    def move(self):
        print("Truck is moving")


vehicles = [
    Car(),
    Motorcycle(),
    Truck()
]

for vehicle in vehicles:
    vehicle.move()

تمرین ۶: پروژه کوچک مدیریت کتاب

یک کلاس به نام Book ایجاد کنید.

ویژگی‌های زیر را در نظر بگیرید:

  • title
  • author
  • pages

سپس یک متد به نام show_info() بنویسید که اطلاعات کتاب را نمایش دهد.

در نهایت دو Object از کلاس Book بسازید.

پاسخ

class Book:

    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages

    def show_info(self):
        print("Title:", self.title)
        print("Author:", self.author)
        print("Pages:", self.pages)


book1 = Book(
    "Python Basics",
    "Ali Ahmadi",
    250
)

book2 = Book(
    "Learn OOP",
    "Reza Ahmadi",
    320
)


book1.show_info()

print()

book2.show_info()

تمرین ۷: پروژه ترکیبی OOP

در این تمرین چند مفهوم OOP را با هم ترکیب می‌کنیم.

یک کلاس والد به نام Employee ایجاد کنید که دارای name و salary باشد.

سپس دو کلاس Developer و Manager ایجاد کنید که از Employee ارث‌بری کنند.

هر کلاس باید متدی به نام work() داشته باشد که رفتار متفاوتی داشته باشد.

پاسخ

class Employee:

    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def work(self):
        print("Employee is working")


class Developer(Employee):

    def work(self):
        print(self.name, "is writing code")


class Manager(Employee):

    def work(self):
        print(self.name, "is managing the team")


developer = Developer("Ali", 30000000)
manager = Manager("Reza", 40000000)


employees = [developer, manager]

for employee in employees:
    employee.work()

چطور بهتر تمرین کنیم؟

برای یادگیری واقعی OOP فقط خواندن کدها کافی نیست. بهتر است ابتدا پاسخ تمرین را نادیده بگیرید و خودتان تلاش کنید.

روش پیشنهادی:
  1. صورت تمرین را کامل بخوانید.
  2. خودتان کد را بنویسید.
  3. کد را در VS Code اجرا کنید.
  4. اگر خطا داشت، خطا را بررسی کنید.
  5. بعد پاسخ سایت را با کد خودتان مقایسه کنید.

جمع‌بندی بخش OOP

با تمام شدن این بخش، با مفاهیم اصلی برنامه‌نویسی شی‌ءگرا در پایتون آشنا شدید.

حالا می‌توانید از این مفاهیم برای ساخت پروژه‌های واقعی‌تر استفاده کنید.

مرحله بعدی آموزش PythonAI: بعد از OOP، وارد مباحث مهم‌تر پایتون می‌شویم؛ از جمله مدیریت خطاها، ماژول‌ها و پکیج‌ها، کار با فایل‌ها و سپس کتابخانه‌های کاربردی پایتون.