سؤال

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

class __cyclepass(object):
    "Null class as a placeholder for deleting items in a cycle."""
    pass

class Cycle(object):

    def __init__(self, *args):
        self.l = list(args)

    #.........................

    def __delitem__(self, key):
        """Magic method for deleting items via indexing."""
        try:
            if isinstance(key, slice):
                s = key.start; e = key.stop; stp = key.step if key.step else 1
                slicelen = abs((s - e) // stp)
                if slicelen == 1:
                    steps = [s]
                else:
                    steps = [s + stp * i for i in range(slicelen)]
                _list = copy(self.l)
                for step in steps:
                    index = step % len(self)
                    _list[index] = __cyclepass() #this is where an error occurs
                self.l = list(filter(lambda x: x.__class__ != __cyclepass, _list))
            else:
                index = key % len(self)
                del self.l[index]
        except:
            raise IndexError("Bad index %s" % str(key))

كل شيء يبدو على ما يرام (وإن كان فوضوي قليلا ولكن هذا هو جانبا نقطة) ، ولكن عند تشغيل البرنامج ويدعو ضمنيا ديليتم طريقة أحصل على هذا الخطأ:

NameError: global name '_Cycle__cyclepass' is not defined

ما على الأرض من شأنه أن يسبب ذلك للبحث عن _Cycle__cyclepass عند إنشاء __cyclepass كائن?

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

المحلول

[نقل تعليقي إلى إجابة ، كما هو مقترح]

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

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