2017-02-14 1 views
0

저는 YAML을 읽기 쉽도록 사용하려고 노력해 왔습니다.PyYAML - 구성을 다루는 방법

그러나 구성을 다루는 가장 좋은 방법은 다소 혼란 스럽습니다.

basicai = aggressiveAI() 

fightercomponent = fighter(strength=10, dexterity=5, death=dramaticdeath()) 

orc = Object(name='orc', hp=100, fighter=fightercomponent, ai=basicai) 

어떻게 YAML이 같은 일을 할 수있는 가장 좋은 방법이 될 것입니다 :

이의 내가 복제하기 위해 노력하고있어 클래스로이 있다고 가정 해 봅시다?

대부분, 구체적으로 명명 된 구성 요소 개체와 주요 개체가 모두 펼쳐지는 긴 목록으로 끝나지 않을 수 있기를 바랍니다.

+0

그래서 우리는'orc'을 만들고'fighter'에 알려지지 않은 변수의 값을 할당하고, 그 후에 그 변수의 값을 변경하면 ... 그걸로 무엇을 보여주고 싶습니까? 코드가 혼란 스럽습니다. – flyx

+0

또한 YAML 코드가 유효하지 않으며 원하는 것을 시연하는 데 도움이되지 않습니다. 'aggressiveAI()'가 호출 인 것 같습니다. YAML 데이터에서 무엇을합니까? '='는 YAML에서 특수 문자가 아니므로':'을 사용하고 싶을 것입니다. – flyx

+0

죄송합니다. 명확하게하기 위해 약간 편집했습니다. YAML 데이터는 달성하려는 유형의 의사 코드 일뿐입니다. YAML 코드에서 =는 잘 작동하는 것처럼 보이지만. – Retro

답변

1

는 개체를 만들 수있는 적절한 생성자와 representers을 가지고 있다고 가정 할 수있다 :

- !AggresiveAI &basicai 
- !Fighter &fightercomponent 
    strength: 10 
    dexterity: 5 
    death: dramaticdeath 
- !Object 
    name: orc 
    hp: 100 
    fighter: *fightercomponent 
    ai: *basicai 

유일한 것은 문제가 YAML 저장 개체로 dramaticdeath로 함수 호출 및 통화 기능을하지. 그래서 그 문자열에서 함수에 __init__ 클래스의 조회를 확인하십시오 Fighter

최고 수준은 목록이 될 필요가 없습니다. 최상위 맵핑을 맵핑으로 만든다. 별칭에서 앵커를 사용하기 전에 앵커가 정의되어 있는지 확인하십시오.

+0

도움을 주셔서 감사합니다 Anthon, 내가 할 수 있도록 사전에이 모든 항목을 추가하십시오 : 'monsters = {Object.name : Object for yaml.load_all (monsterdata)}의 객체 ' 그러나 나는'AttributeError : '파이터'객체에는 'name'속성이 없습니다. 이것은 모든 객체를 개별적으로 읽으려고하기 때문입니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? – Retro

+0

@Retro 그것은'Object' 클래스를 어떻게 정의 했느냐에 달려 있습니다. 나는 당신이이 질문에 쉽게 답할 수 있다고 생각하지 않기 때문에 지금 당신이 가지고있는 (그리고 링크에서이 질문을 참조하십시오) 프로그램으로 새로운 질문을 만들 것을 제안합니다. 그리고 원래 질문을 많이 바꾸지 말고 (그리고 움직이는 목표로 삼으십시오). – Anthon

+0

고마워요. - 저도 그렇게 할게요. 내가 인쇄 할 수있는 질문에서 내가 질문 한 내용에 대답했다고 믿으면이 문제는 해결 된 것으로 표시 할 것입니다. – Retro