سؤال

لماذا هذا الهيكل

class A:
    def __init__(self, a):
        self.a = a

    def p(self, b=self.a):
        print b

ويعطي NameError: name 'self' is not defined الخطأ؟

هل كانت مفيدة؟

المحلول

ويتم تقييم القيم حجة افتراضي في وظيفة تحديد الوقت، ولكن self حجة لا تتوفر إلا في وقت استدعاء دالة. وهكذا الحجج في القائمة حجة لا يمكن أن يشير بعضها البعض.

وانها نمط مشترك الافتراضي حجة لNone وإضافة اختبار لذلك في التعليمات البرمجية:

def p(self, b=None):
    if b is None:
        b = self.a
    print b

نصائح أخرى

لالحالات التي أود أيضا أن يكون لديك خيار تحديد "ب" إلى بلا:

def p(self, **kwargs):
    b = kwargs.get('b', self.a)
    print b

إذا كنت قد وصلت هنا عن طريق البريد الإلكتروني، من فضلك تأكد للتأكد من أن كنت قد أعطيت النفس كمعلمة الأول إلى وظيفة الطبقة. خصوصا إذا حاولت الرجوع قيم هذا الكائن داخل الدالة.

def foo():
    print(self.bar)

> NameError: لم يتم تحديد اسم 'النفس'

def foo(self):
    print(self.bar)

> "مبروك لك تخلصوا من NameError!"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top