2017-10-17 4 views
-1

작은 문제가 있습니다.문자열 또는 목록에서 개체 유형 변경 [Python]

모델 객체의 속성을 이름별로 다시 검색하여 순서가 지정된 사전을 만드는 기능을 만들려고합니다. 모델은 데이터베이스의 데이터를 기반으로하며 때때로 변환해야합니다. 목록 요소가 문자열 인 경우 - 문제가 없으면 ODictionary가 만들어져 작동합니다. 그러나 예를 들어 int를 문자열로 변환하려면 문제가 있습니다. 튜플로 만들었습니다. 첫 번째 요소는 새로운 OrderedDictionary 항목의 이름이고 두 번째 요소는 올바른 유형이어야합니다.

: elementValue = getattr (소자 [1] 소자 [0]) ("ID"INT) 나 얻고 함께 "AttributeError는 : 입력 오브젝트 INT는 'ID'를 어떠한 속성이없는" 그래서 잘못된 옵션입니다 ...

getattr을 처음 사용했습니다. 이름으로 객체 att를 검색해야하지만 주어진 str 유형에서 다른 유형으로 캐스팅하는 방법에 대한 기본적인 사용법 (나에게있어)에는 아무런 문제가 없다.

+0

문자열을 어떤 유형으로 캐스팅 하시겠습니까? – Goyo

답변

1

elementValue = getattr(element[1], element[0])

With ("id", int) i'm getting "AttributeError: type object 'int' has no attribute 'id'" So its wrong option...

getattr()에 대한 서명은 object, attrname[, default]입니다 - (object 경우 옵션 기본값은 어떤 속성 attrname이없는 개체가 당신이 attrname 속성 이름 (문자열)에서 속성을 얻고 싶은 것을 objectdefault 당신이 경우 default을 전달하지 말고 object에는 attrname이라는 속성이 없으므로 AttributeError이 표시됩니다. 분명히 getattr()은 어떤 종류의 변환도하지 않을 것입니다. 이것은 직접해야 할 일입니다.

몇 가지 힌트 이상을 제공하기 위해 코드를 게시하지 않았지만 ("attrname", typeconverter) (여기에서 typeconverter은 원래 속성 값을 사용하고 변환 된 값을 반환하는 호출 가능 항목 임) 가정하면 원하는 것

def to_odict(obj, attrlist): 
    od = OrderedDict() 
    for attrname, converter in attrlist: 
     # TODO : error handling ??? 
     raw_val = getattr(obj, attrname) 
     val = converter(raw_val) 
     od["attrname"] = val 
    return od 
관련 문제