내가 lxml.etree._Element
에 속성을 주입하기 위해 노력하고있어,하지만 모듈이 완전히 C로 구현 한, setattr
실패 :파이썬 : C 라이브러리에 의해 생성 된 객체에 속성을 주입
Traceback (most recent call last):
[...]
setattr(node.getroottree().getroot(), "attributeName", value)
AttributeError: 'lxml.etree._Element' object has no attribute 'attributeName'
사용의 경우 : 내가 가진 XPath에 의해 XML 파일에서 텍스트를 추출하고 $(ENV)
와 같은 일치 항목을 해당 값으로 바꿉니다. 따라서 변수 사전 (예 :)을 해당 함수에 전달해야하는 대신 고정 된 위치 (코드의 XML 루트)에 특성을 추가하는 것이 더 쉬울 것입니다. 바보 같은 해결 방법을 사용할 수 있습니다 하지만 파이썬 속성을 주입하는 가장 좋은 방법이 될 것입니다. 각각의 XML 파일을 다른 변수 값을 가질 수 있기 때문에 내가 전역 변수를 사용할 수 없습니다. 그래서
, C 기반의 클래스/객체로 뭔가를 주입 할 수있는 방법?
글쎄, 클래스를 포장하는 것은 다음'node.getroottree() getroot 때문에 작동하지 않습니다.
따라서, 예를 들어, 각 루트 오브젝트의 ID와 관련된 사전을 저장할 수 '여전히 랩핑되지 않은 객체를 가리킬 것입니다. 내 함수에는'node' 만 사용할 수 있습니다.) 현재 XML URL이 필요 없기 때문에'node.getrootree(). docinfo.URL = repr (variablesDict)'라는 해결 방법이 있습니다. 쓸 수있는 몇 가지 속성 중 하나),'eval'을 사용하여 사전을 다시 작성하십시오. – AndiDog
내 대답에 더 나은 해결 방법을 추가했습니다. – ncoghlan
답변 감사합니다. 해결 방법도 효과가 있지만 XML 문서와 함께 변수를 파기 할 것이므로 계속 유지할 것입니다. – AndiDog