반응형
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의 경우 일부 함수에는 "비공개"임을 나타 내기위한 것이 아닌 선행 밑줄이 있습니다.)
namedtuple
s는 표준 튜플처럼 불변입니다. 두 가지 선택이 있습니다.
- 다른 데이터 구조, 예를 들어 클래스 (또는 사전)를 사용하십시오. 또는
- 구조를 업데이트하는 대신 교체하십시오.
전자는 다음과 같습니다.
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
반응형
'IT TIP' 카테고리의 다른 글
Java, BigDecimal의 소수 부분 만 추출 하시겠습니까? (0) | 2020.12.15 |
---|---|
자바 스크립트에서 긴 숫자를 축약 된 문자열로 변환합니다. (0) | 2020.12.15 |
Karma 실행 단일 테스트 (0) | 2020.12.15 |
계산 된 속성과 클로저로 설정된 속성의 차이점 (0) | 2020.12.15 |
열려있는 모든 문서 탭을 표시합니다. (0) | 2020.12.15 |