Adam Ebrahim نشر 27 مايو 2021 أرسل تقرير نشر 27 مايو 2021 ما هو الغرض من كلمة self في بايثون؟ أفهم أنه يشير إلى الكائن المحدد الذي تم إنشاؤه من هذا الصنف Class، لكن لا يمكنني معرفة سبب الحاجة إلى إضافته صراحة إلى كل وظيفة method كمدخل. class MyClass: def myMethod(self, name): self.name = name لمذا لا نقوم بكتابة الصنف السابق بالكشل التالي: class MyClass: def myMethod(name): self.name = name اقتباس
1 عبدالله عبدالرحمن11 نشر 28 مايو 2021 أرسل تقرير نشر 28 مايو 2021 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 Sam Ahw نشر 27 مايو 2021 أرسل تقرير نشر 27 مايو 2021 إن السبب في استخدام 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 اقتباس
السؤال
Adam Ebrahim
ما هو الغرض من كلمة self في بايثون؟ أفهم أنه يشير إلى الكائن المحدد الذي تم إنشاؤه من هذا الصنف Class، لكن لا يمكنني معرفة سبب الحاجة إلى إضافته صراحة إلى كل وظيفة method كمدخل.
لمذا لا نقوم بكتابة الصنف السابق بالكشل التالي:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.