الكائن في بايثون
يمكن تعريف الكائن في لغة بايثون باستخدام الكلمة المحجوزة class ، ويتم إنشاء الكائنات من هذه الصنف بواسطة استدعاء الدالة __init__() .
على سبيل المثال، يمكن تعريف صنف Person لتمثيل أشخاص معينين بالطريقة التالية:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
ويمكن إنشاء كائن person1 من هذا الصنف بالطريقة التالية:
person1 = Person("Ahmed", 25)
ويمكن الآن الوصول إلى خصائص هذا الكائن كالتالي:
print(person1.name) # يطبع "Ahmed"
print(person1.age) # يطبع 25
الخاصية في بايثون
الخاصية (Attribute) في بايثون هي متغير ينتمي إلى كائن (Object) ويمكن الوصول إليه عن طريق النقطة ".". وهي معروفة بأنها تحتوي على البيانات التي تمثل حالة الكائن، مثل اللون أو الحجم أو الاسم أو أي خاصية أخرى للكائن.
مثلاً، لدينا كائن يمثل شخصاً ويحتوي على العديد من الخصائص مثل الاسم، العمر، والعنوان. يمكن الوصول إلى هذه الخصائص باستخدام النقطة "."، على النحو التالي:
class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
person1 = Person("Ahmed", 25, "Cairo")
print(person1.name) # output: Ahmed
print(person1.age) # output: 25
print(person1.address) # output: Cairo
في هذا المثال، name و age و address هي خصائص الشخص التي يحتوي عليها كائن person1 .
self
self هو معامل (argument) خاص في دوال الكلاسات (methods) في لغة بايثون، ويشير إلى الكائن الذي يتم استدعاء الدالة عليه.
عند قيامك بتعريف دالة داخل كلاس في بايثون، فإنك تحتاج إلى تمرير المعامل self كأول معامل في التعريف، حتى يستطيع البرنامج التعرف على الكائن الذي يتم استدعاء الدالة عليه. وبذلك، يمكنك الوصول إلى خصائص الكائن الحالي (المشار إليه بـ self ) داخل نطاق الدالة.
في العادة، يتم تسمية هذا المعامل بـ self ، لكن يمكنك تسميته بأي اسم تريده، غير أنّ من الأفضل الالتزام بتسمية self لتسهيل مهمة القراءة والفهم لدى المبرمجين الآخرين الذين قد يطالعون الكود الخاص بك.
في لغة البرمجة بايثون، الكلمة self تستخدم عادة في تعريف دوال داخل الكلاسات. تمثل self إشارة إلى الكائن الذي يتم استدعاء الدالة منه. وباستخدام self، يمكن للدالة الوصول إلى خصائص وأساليب الكائن الذي تم استدعاؤها منه. ويتم تمرير self بشكل ضمني كأول معامل في دالة الكلاس، حيث يتم تمرير الكائن الحالي (self) تلقائيًا عند استدعاء الدالة. على سبيل المثال:
class MyClass:
def myFunction(self):
print("Hello, world!")
في هذا المثال، تم تعريف الكلاس MyClass، وقد تم تعريف دالة بإسم myFunction التي تستخدم self كمعامل ضمني. وعند استدعاء الدالة myFunction من كائن من نوع MyClass، يتم تمرير الكائن الحالي (self) تلقائيًا.
الدالة _init_()
دالة __init__() هي دالة خاصة في لغة البرمجة بايثون وتستخدم عادة في تعريف الصفوف (Classes). تقوم هذه الدالة بإعداد متغيرات الكائن (object variables) عند إنشاء كائن جديد من الصف.
في الدالة __init__() يتم تعريف المتغيرات التي تحتاجها الكائن الذي يتم إنشاؤه، وتم تمرير القيم البدءية إلى هذه المتغيرات إن أردت ذلك. لهذا السبب، فإن __init__() هي دالة بناء (constructor)، حيث يتم استدعاؤها بشكل تلقائي عند إنشاء كائن جديد من الصف.
لتعريف دالة __init__() , يجب أن تكون دائماً تحتوي على متغير واحد هو self ، والذي يشير إلى الكائن الحالي الذي يتم إنشاؤه. وباستخدام self يمكنك الوصول إلى المتغيرات الأخرى في الكائن.
فيما يلي مثال على كيفية استخدام الدالة __init__() في تعريف صف:
class MyClass:
def __init__(self, name, age):
self.name = name
self.age = age
في هذا المثال، تم تعريف الصف MyClass وتم تعريف دالة __init__() التي تحتوي على المتغيرات name و age . عند إنشاء كائن جديد من MyClass ، يتم تمرير قيمة name و age إلى الدالة __init__() . وبعد ذلك، يتم تعيين هذه القيم إلى المتغيرات self.name و self.age ، والتي تصبح متاحة للاستخدام في سياق الكائن.
العلاقه بين الكلاس و الكائن في بايثون
في لغة بايثون، يتم استخدام الكائنات (Objects) لتمثيل الأشياء والمفاهيم في الحياة الواقعية. ويتم تعريف هذه الكائنات باستخدام الصفوف (Classes).
وببساطة، يمكن اعتبار الصف أو الكلاس (Class) كنوع من القالب الذي يحدد خصائص وسلوكيات الكائن (Object) الذي يتم إنشاؤه بناءً عليه.
عند إنشاء كائن جديد، يتم استناده إلى الصف (Class) المحدد. وبالتالي، يتضمن الكائن (Object) المنشأ خصائص وسلوكيات محددة تم تعريفها في الصف (Class) الأساسي.
بشكل عام، يمكن القول أن الصف (Class) يمثل الهيكل الأساسي للكائن (Object)، ويحدد الخصائص والسلوكيات التي سيتم تمثيلها في الكائن (Object) الناتج عنه. وبالتالي، فإن العلاقة بين الصف (Class) والكائن (Object) هي علاقة "التمثيل"، حيث يتم تمثيل الكائن بناءً على الصف المحدد.
فائدة الكلاس
توفر الكلاسات في لغات البرمجة ميزة هامة تتمثل في تنظيم الكود وتحسين إعادة استخدامه. من خلال استخدام الكلاسات، يمكن للمطورين تجميع البيانات والوظائف المرتبطة بها في هيكل واحد سهل الاستخدام، مما يسمح بإعادة استخدام الكود بسهولة في مكان آخر في البرنامج أو حتى في برامج أخرى.
وتساعد الكلاسات أيضًا على تقليل احتمالية حدوث الأخطاء في البرمجة، حيث يمكن للمطورين تجميع البيانات والوظائف المرتبطة بها في كائن واحد وتجميع الأساليب المشتركة بينها في كود أكثر قابلية لإدارة الأخطاء.
وتسمح الكلاسات أيضًا بإنشاء برامج أكثر قابلية للتوسع، حيث يمكن للمطورين إضافة مزيد من البيانات والوظائف إلى الكلاسات بشكل سهل دون أي تأثير على باقي البرمجة الموجودة في الشفرة.