2017-09-23 2 views
-1

나는 시도하고있다. 그러나 self.value는 에러를 보여준다. ie ... self.a, self.b, self.c ...를 반복하고 싶다. 배우는 데 도움이 필요하다. ..... 원하는 출력은 x = [AA, EE, II] 클래스와 루프를 사용합니다 .i는 self.a, self.b, self.c for 루프를 사용하여 루핑을 시도했습니다 ......... i 파이썬과 객체 지향 프로그래밍을 배우고 것은 새로 .... 당신이 원하는 것은 getattr을 사용하는 것입니다파이썬에서 배열 처리

import string 
A = ["AA","BB","CC","DD"] 
B = ["EE","FF","GG","HH"] 
C = ["II","JJ","KK","LL"] 
class User: 
    def __init__(self,A,B,C): 
     self.a= A 
     self.b= B 
     self.c= C 

    def User1(self): 
     x=[] 
     for i in range(ord('a'), ord('c')+1): 
      value= chr(i) 
      x.append= self.(value)[0] ///for getting first elemen from A,B,C 
      i+=1 
     return x 


honey= User(A,B,C) 
print(honey.User1()) 
+1

'x.append = self. (value) [0]'은 의미가 없습니다. 리스트에 추가하려면'x.append (value [0])'를 사용합니다. 인스턴스 속성이 아니기 때문에'self.value'를 사용할 수 없습니다 (또는'self.value = chr (i)'로 미리 정의하십시오). – roganjosh

답변

1

밖으로 도와 -하지만이 깨진 다른 몇 가지가있다. . (주석 문자는 파이썬에서 #, 아닌 // 순서 사실로 시작

을 따라서, 귀하의 사용자 1 방법은 같은 수 :뿐만 아니라

def User1(self): 
     x=[] 
     for value in "abc": 
      x.append(getattr(self, value)[0]) 
     return x 

참고하던 것이 for 문 것이다 항상 시퀀스를 반복하며 시퀀스를 숫자로 변환 할 필요가 없습니다. 숫자를 원하는 요소로 다시 변환하는 것입니다. 문자열은 문자의 시퀀스이기 때문에 "abc"

위에서 말한 것처럼, t 그는 getattr을 내장하여 self에서 원하는 속성을 검색하고 속성 이름을 value 변수에 포함 된 문자열로 gven합니다.

+1

@roganjosh : 방금 작업을 이해하기 위해 OP에 최소한의 수정이 필요한 "쉬운"코드로 하드 ​​코딩했습니다. 'self .__ dict__ '를 반복하는 것이 더 일반적 일 수 있다는 것에 동의하지만, 해를 끼치는 것보다 더 잘하기 위해 철저히 설명해야합니다. 그리고 그런 식으로 생각한다면, Sequence 프로토콜에 대해 한번 이야기하고, OP가 한 번에'__iter__ '를 구현하는 것이 더 나을 것입니다. – jsbueno

+0

감사합니다. ..... getattr이 (가) 정말 고맙습니다. –