برمجة

البرمجة كائنية التوجّه

الأصناف والكائنات والدوال والبناء __init__ والوراثة.

كل الدروس · دروس بايثون: تعلّم من الصفر

الصنف والكائن

الصنف مخطط والكائن نسخة فعلية مبنية منه. فمثلًا ينتج الصنف Account كائنًا مستقلًا لكل عميل. تعمل الدالة __init__ عند إنشاء الكائن، و self هو الكائن نفسه.

class Account:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount

    def show(self):
        print(f"{self.owner}: {self.balance} AZN")

a = Account("Rena", 50)
a.deposit(25)
a.show()   # Rena: 75 AZN
  • تحفظ السمات حالة الكائن.
  • الطرائق هي ما يستطيع الكائن فعله.

الوراثة

تتيح الوراثة لصنف جديد أن يأخذ ما يقدمه صنف قائم. يرث الصنف الفرعي طرائق الأب ويمكنه تجاوزها أو استدعاء الأب عبر super().

class Account:
    def __init__(self, owner, balance=0):
        self.owner, self.balance = owner, balance

class SavingsAccount(Account):
    def __init__(self, owner, balance=0, rate=0.05):
        super().__init__(owner, balance)
        self.rate = rate

    def add_interest(self):
        self.balance *= 1 + self.rate

s = SavingsAccount("Tural", 200)
s.add_interest()
print(s.balance)   # 210.0

الطرائق الخاصة وتنبيه

تحدد __str__ شكل الكائن عند الطباعة، وتجعل __len__ الكائن يعمل مع len(). والشرطتان السفليتان المزدوجتان تدلان على آليات خاصة في اللغة.

class Playlist:
    def __init__(self, songs):
        self.songs = songs
    def __len__(self):
        return len(self.songs)
    def __str__(self):
        return "Playlist: " + ", ".join(self.songs)

p = Playlist(["A", "B"])
print(p, len(p))

نصيحة: ليس كل شيء بحاجة إلى صنف. تكفي دالة لحساب بسيط، أما الصنف فيفيد عندما تتلازم الحالة والسلوك.

المؤلف: Nibras Code