IT TIP

AttributeError : Python에서 속성을 설정할 수 없습니다.

itqueen 2020. 12. 15. 20:40
반응형

AttributeError : Python에서 속성을 설정할 수 없습니다.


내 코드는 다음과 같습니다.

N = namedtuple("N", ['ind', 'set', 'v'])
def solve()
    items=[]
    stack=[]
    R = set(range(0,8))
    for i in range(0,8):
        items.append(N(i,R,8))      
        stack.append(N(0,R-set(range(0,1)),i))
    while(len(stack)>0): 
        node = stack.pop()
        print node
        print items[node.ind]   
        items[node.ind].v = node.v

마지막 줄에서 원하는 items[node.ind].v값을 설정할 수 없으며 node.v오류가 발생합니다.

"AttributeError: can't set attribute"

나는 무엇이 잘못되었는지 모르지만 구문을 사용하는 node.v+=1것도 동일한 오류를 보여주기 때문에 구문을 기반으로 한 것이어야합니다 . 저는 Python을 처음 사용하므로 위의 변경을 가능하게하는 방법을 제안하십시오.


items[node.ind] = items[node.ind]._replace(v=node.v)

(참고 : _replace 함수의 선행 밑줄 때문에이 솔루션을 사용하지 마십시오. 특히 namedtuple의 경우 일부 함수에는 "비공개"임을 나타 내기위한 것이 아닌 선행 밑줄이 있습니다.)


namedtuples는 표준 튜플처럼 불변입니다. 두 가지 선택이 있습니다.

  1. 다른 데이터 구조, 예를 들어 클래스 (또는 사전)를 사용하십시오. 또는
  2. 구조를 업데이트하는 대신 교체하십시오.

전자는 다음과 같습니다.

class N(object):

    def __init__(self, ind, set, v):
        self.ind = ind
        self.set = set
        self.v = v

그리고 후자 :

item = items[node.ind]
items[node.ind] = N(item.ind, item.set, node.v)

편집 : 후자를 원한다면 Ignacio의 대답은 구운 기능을 사용하여 더 깔끔하게 동일한 작업을 수행합니다.

참조 URL : https://stackoverflow.com/questions/22562425/attributeerror-cant-set-attribute-in-python

반응형