3Create
@3Create

Как решить проблему с экземпляром класса?

Изучаю код, как он работает.. и наткнулся проблему...я вроде немного начинаю понимать на практике код...и тут я наткнулся на экземпляры класса, пытаюсь решить проблему, но не могу найти причину ошибки
Запускаю код. Главным виновником вылетает функция и причинное место в ней эта строчка
c1 = bm.start_kline_socket....

Traceback (most recent call last):
  File "E:/Crea/Python/Testapi1/core.py", line 1016, in <module>
    Detector.run()
  File "E:/Crea/Python/Testapi1/core.py", line 940, in run
    cls.startKlineSockets()
  File "E:/Crea/Python/Testapi1/core.py", line 872, in startKlineSockets
    c1 = bm.start_kline_socket(symbol,Detector.handleKlineResponseMulti,interval=SETTINGS['shortInterval'])
TypeError: start_kline_socket() missing 1 required positional argument: 'symbol'

@classmethod
    def startKlineSockets(cls):
        cls.connKeys = {}
        args = []
        print(cls.symbols)
        for symbol in cls.symbols:
            cls.connKeys[symbol] = []
            c1 = bm.start_kline_socket(symbol,Detector.handleKlineResponseMulti,interval=SETTINGS['shortInterval'])
            c2 = bm.start_kline_socket(symbol,Detector.handleKlineResponseMulti,interval=SETTINGS['longInterval'])
            cls.connKeys[symbol].append(c1)
            cls.connKeys[symbol].append(c1)
        bm.start()

И функция start_kline_socket:
def start_kline_socket(self, callback: Callable, symbol: str, interval=AsyncClient.KLINE_INTERVAL_1MINUTE) -> str:
        return self._start_async_socket(
            callback=callback,
            socket_name='kline_socket',
            params={
                'symbol': symbol,
                'interval': interval,
            }
        )

В первый символ 'symbol' все передается....через принт проверил...Подскажите пжлуйста :)
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
@Vindicar
3Create, вот и ответ - не нужно вызывать экземплярные методы на классе.
Поясню. Если у тебя есть такой класс:
class A:
  #это экземплярный метод - нет декоратора @classmethod или @staticmethod
  def test(self, x, y): 
    print(x+y)


То при обычном вызове в духе
a = A() #создаём экземпляр класса
a.test(1, 2) #вызываем метод экземпляра

ссылка на объект a автоматически помещается в self, тогда 1 попадёт в x, а 2 в y.
Если же вызывать A.test(1,2), то поскольку экземпляра нет, его нужно явно указывать. Тогда в self попадёт 1, в x попадёт 2, а для y значения не найдётся, что приведёт к ошибке.
Можно вызвать это так: A.test(a, 1, 2), но это по сути то же самое, что a.test(1,2).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы