0

suds.transportのReplyクラスを変更しようとしています。

私は次のアプローチで試しました:

import suds.transport
old_reply = suds.transport.Reply

class Reply2:
    """
    A transport reply
    @ivar code: The http code returned.
    @type code: int
    @ivar message: The message to be sent in a POST request.
    @type message: str
    @ivar headers: The http headers to be used for the request.
    @type headers: dict
    """

    def __init__(self, code, headers, message):
        """
        @param code: The http code returned.
        @type code: int
        @param headers: The http returned headers.
        @type headers: dict
        @param message: The (optional) reply message received.
        @type message: str
        """
        print 'hello, i patched the class'
        self.code = code
        self.headers = headers
        self.message = message

    def __str__(self):
        s = []
        s.append('CODE: %s' % self.code)
        s.append('HEADERS: %s' % self.headers)
        s.append('MESSAGE:')
        s.append(self.message)
        return '\n'.join(s)

suds.transport.Reply = Reply2

リクエストを実行するclientと (通常は Suds で行うように)、パッチが適用されたものではなくデフォルトの Reply が使用されます。

このアプローチが失敗する理由は何でしょうか?

__init__:個別にパッチを適用すると、より良い結果が得られるようです。しかし、クラスの動作をさらに変更する必要があります。最後に、返信をオーバーライドして、SOで尋ねられたように、受信した添付ファイルを取得しようとしています。

4

1 に答える 1

1

モジュールは次の行でsuds.transport.httpインポートされます。Reply

from suds.transport import *

パッチを適用する前にこれを行います。その参照も更新する必要があります。

import suds.transport.http
suds.transport.http.Reply = Reply2
于 2013-06-19T07:21:12.817 に答える