Я создаю очень простой объект-контейнер в python, и одна из его функций требует создания временного нулевого класса-заполнителя, который абсолютно ничего не делает, кроме как сообщить программе, что удалить.Ошибка Python, создающая экземпляр объекта внутри другого
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))
Все кажется отлично (хотя и немного грязный, но это в сторону точки), но при запуске программы и неявным вызовом delitem метод, который я получаю эту ошибку:
NameError: global name '_Cycle__cyclepass' is not defined
Что на земле будет заставлять его искать _Cycle__cyclepass
при создании объекта __cyclepass
?
Это результат смены имени пользователя на языке "python". переименуйте из префикса с двойным подчеркиванием на однострочный символ, и проблема решена. – shx2
Хорошо, я изменил его и действительно все исправлено, спасибо за помощь! Почему python делает это и может ли он использоваться в любом практическом смысле? – user3002473
@ shx2 Почему бы вам не опубликовать его как ответ? :) – aIKid