البرمجة كائنية التوجّه
الأصناف والكائنات والدوال والبناء __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))نصيحة: ليس كل شيء بحاجة إلى صنف. تكفي دالة لحساب بسيط، أما الصنف فيفيد عندما تتلازم الحالة والسلوك.