Как издеваться/проксировать класс?Python

Программы на Python
Ответить
Anonymous
 Как издеваться/проксировать класс?

Сообщение Anonymous »

Мне нужно проксировать класс websocket.WebSocketApp, но я не могу изменить код, в котором инициализируется веб-сокет.
Я пытался исправить класс с помощью специального класса, например:

Код: Выделить всё

from locust.event import EventHook
from websocket import ABNF, WebSocketApp

class WebSocketAppPatch(WebSocketApp):
def __init__(self, request_event: EventHook, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request_event = request_event

def send(self, data, opcode=ABNF.OPCODE_TEXT):
exception = None
try:
super().send(data, opcode)
except Exception as e:
exception = e
self.request_event.fire(
request_type="WSS",
name="send",
response_time=0,
response_length=len(data or []),
exception=exception,
context={},
)
и я использую его через такой патчер

Код: Выделить всё

from unittest.mock import patch

@patch('websocket.WebSocketApp', WebSocketAppPatch)
def test_on_patch():
sensor = Sensor()
sensor.connect() # Here the websocket is opened
sensor.send_data() # We send data via the websocket
sensor.disconnect() # Close the websocket
Моя проблема в том, что базовый класс WebSocketApp WebSocketAppPatch также исправлен с помощью WebSocketAppPatch. Так как же этого избежать?
И я не могу найти, как добавить аргумент request_event к вызову конструктора WebSocketAppPatch.

Подробнее здесь: https://stackoverflow.com/questions/798 ... fy-a-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»