• 0

لماذا نستخدم كلمة self في كل دالة في بايثون؟

ما هو الغرض من كلمة self في بايثون؟ أفهم أنه يشير إلى الكائن المحدد الذي تم إنشاؤه من هذا الصنف Class، لكن لا يمكنني معرفة سبب الحاجة إلى إضافته صراحة إلى كل وظيفة method كمدخل.

class MyClass:
    def myMethod(self, name):
        self.name = name

لمذا لا نقوم بكتابة الصنف السابق بالكشل التالي:

class MyClass:
    def myMethod(name):
        self.name = name

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

self تشير لنفس الكائن ويتم إضافتها للوصول الى بيانات نفس الكائن وهذه أمثلة للتوضيح أكثر

إذا استخدمنا الكود خاصتك بدون تمرير self

class MyClass:
    def myMethod(name):
        self.name = name

فلن يحصل أي خطأ وايضا عند إنشاء كائن من هذا الصنف

test = MyClass()

فلن يحصل أي خطأ ولكن عندما نقوم بإستدعاء name من هذا الكائن

test.name('ali')

هنا ستظهر لك مشكلة بأن الكائن test ليس لديه name ، لماذا؟

لأنها عند إستدعاء أي دالة على الكائن وتمرير self فإنه في الخلفية يتم تمرير هذا الكائن تلقائياً

والآن الدالة التي تم إستدعائها لديها الوصول الى هذا الكائن

class MyClass:
    def myMethod(self, name):
        self.name = name

والآن عند إستخدام هذا الكود فإن الدالة myMethod عند إستدعائها سيتم تمرير هذا الكائن تلقائياً والآن لديها الوصول الى هذا الكائن

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

إن السبب في استخدام self لأن لغة بايثون لا تستخدم الترميز @ للدلالة على الغرض المنشأ، ولكن لدينا توابع التي تمرر بدورها هذا الغرض بشكل أوتوماتيكي ولكن لا يتم استقباله بشكل اوتوماتيكي فلذلك يجب علينا ذكر self بشكل صريح.

ويعود استخدامها للدلالة على غرض من هذا الصف ولإتاحة إمكانية الوصول إلى بيانات وتوابع هذا الصف فتقوم بربط المتغيّرات مع القيم المعطاة.

مثال بسيط عن تمرير القيم واستخدام الباني مع self:

class library():
 

def __init__(self, book, author):
self.book = book
self.author = author
 
def show(self):
print("book is", self.book)
print("author is", self.author )
 
anyLibrary = library("book1", "John")
anotherLibrary = library("book2", "Smith")
 
anyLibrary.show()
anotherLibrary.show()

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن