اذهب إلى المحتوى

السؤال

نشر

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

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

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

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

 

Recommended Posts

  • 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 عند إستدعائها سيتم تمرير هذا الكائن تلقائياً والآن لديها الوصول الى هذا الكائن

  • 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()

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...