파이썬 오류가 다른 것의 객체의 인스턴스를 만드는 중 오류가 발생했습니다.

StackOverflow https://stackoverflow.com//questions/21066885

문제

Python에서 매우 간단한 컨테이너 객체를 만들고 함수 중 하나는 프로그램을 알려주는 것을 제외하고는 절대적으로 아무 것도하지 않는 일시적인 NULL 자리 표시 자 클래스를 만들어야합니다.

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의 이름의 이름 맨 글링 의 결과입니다.두 배의 밑줄 접두사에서 단일 밑줄로의 이름을 바꾸고 문제가 해결됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top