2012-07-21 5 views
0

내가 좋아하는 매개 변수를 처리하는 일부 기능이 있습니다형식 오류 : 개체가 호출되지 않습니다

def createDataModel(objectModel): 
    ...... 
def createLayoutModel(objectModel): 
    ...... 
def createWidgetModel(objectModel): 
    ...... 

내가 특정 루트 태그 이름을 입력 파일과 같은 일부 XML이이 같은 (데이터 모델, 레이아웃, 페이지) 그런 다음 객체 모델로 변환합니다. 나는 통과 할 때이 기능은 개체 모델

xsdPathsMap = { 
    "dataModel": createDataModelFromXml, 
    "layout": createLayoutModel, 
    "page": createWidgetModelFromXml 
} 
다음

내가 XML에서 객체 모델을 만들고 그들에게 그들을 처리해야 기능을 할당을 처리해야 결정하는지도,

result = xsdPathsMap[xmlRootName] 
# a is objectified xml 
a.modelerFunction = result 

이 클로저 방식의 객체이 예외가 발생했습니다 :

a.modelerFunction(a) 

TypeError: object is not callable  

무엇이 문제입니까?

Traceback (most recent call last): 
    File "model/xmlTranporter.py", line 204, in <module> 
    a = main("main/schema") 
    File "model/xmlTranporter.py", line 200, in main 
    a(obj) 
TypeError: 'lxml.objectify.StringElement' object is not callable 
+0

:

은 물론 벌금의의하지만 당신이 __call__ 프로토콜 메소드를 정의 할 필요가 호출 클래스를 정의하려면

. –

+0

@NedBatchelder 더 많은 정보를 추가했습니다. – Pooya

+0

작동하는 것처럼 보입니다. 예외가 발생한 전체 추적을 보여줄 수 있습니까? –

답변

2

나는이 과제를하고있는 이유를 잘 모르겠어요 모델링 함수에 a를 전달하면됩니다.

result(a) 

그러나 이것은 사용자 모델 맵에서 가져 오는 함수는 실제로 클래스가 아니라 함수입니다. 당신은 정확하게 문제를 진단 할 수있는 충분한 코드가 표시되지 않는

class MyModelingFunction(object): 
    ... 

    def __call__(self, *args, **kwargs): 
     """do something when I'm called""" 
+0

이 코드를 다음과 같이 작성해야합니다. – Pooya

+0

모든 객체를 준비해야하기 때문에 서로에게 전달하고 우선 순위에 따라 정렬해야합니다. – Pooya

2

당신이 얻을 오류 메시지가 a.modelerFunction(a)에, 당신은 당신이하는 기능을 가지고 있다고 생각하지만, 당신이하지 않는 것을 의미한다 :

는이 내 역 추적입니다. a.modelerFunction은 함수가 아닌 사용자 정의 개체입니다. 더 많은 코드를 게시하면 그 이유를 파악할 수 있습니다.

result = xsdPathsMap[xmlRootName] 
a.modelerFunction = result # this is just kind of weird 

중 하나가 a의 클래스에 모델러 기능을 추가 단지 방법으로 호출 :

a.createModel() 

또는

관련 문제