Как использовать асинхронный декоратор из дочернего класса?

Как правильно переместить декоратор из родительского класса в дочерний класс для улучшения кода?
  • 23 декабря 2023 г. 13:07
Ответы на вопрос 2
Для использования асинхронного декоратора из дочернего класса вам необходимо переместить его из родительского класса. 

Допустим, у вас есть родительский класс `Parent` с асинхронным методом, который должен быть использован в дочернем классе `Child`:

```python
class Parent:
    @async_decorator
    async def async_method(self):
        # Ваш код

class Child(Parent):
    ...
```

Чтобы использовать асинхронный декоратор из родительского класса в дочернем классе, вам нужно выполнить следующие шаги:

1. Определите декоратор вне родительского класса `Parent`:
```python
async def async_decorator(func):
    # Ваш код
    return decorated_func
```

2. В дочернем классе `Child` определите асинхронный метод с декоратором как статический метод:
```python
class Child(Parent):
    @staticmethod
    @async_decorator
    async def async_method():
        # Ваш код
```

Теперь вы можете вызвать `async_method` из дочернего класса `Child` и использовать асинхронный декоратор, который изначально был определен в родительском классе `Parent`.
Как вызвать асинхронный декоратор с дочернего класса?
Никак.

Вы слышали про инкапсуляцию? Методы которые Вы определяете в классе, доступны только для объектов этого класса и наследников. У вас все наоборот: метод объявлен в потомке, а вызвать пытаетесь из родителя.
Вообще исходя из того что у вас в классе 2 статик метода и недодекоратор создается ощущение, что вы делаете что-то не то. Да и причин в наследовании что-то не вижу.

А декоратор просто сделайте отдельно. Если очень любите классы, можно реализовать декоратор на основе класса поместив логику в __call__
Похожие вопросы