Тип-хит-хранение класса функции в оберткеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Тип-хит-хранение класса функции в обертке

Сообщение Anonymous »

Я проектирую декоратор @Action как часть API для сбора и обнаружения определенных методов в классе на бэкэнд, и я хотел бы, чтобы его параметры динамически отражали состояние экземпляра. Например: < /p>

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

class Player():
...
def _private_fun(): ...

@action(
param_type_factory={
"target": lambda player: Literal[tuple(player.opponents)]
}
)
def attack_action(self, target):
...
Здесь, player.opponents меняется с течением времени, поэтому тип подсказка для Target должен обновляться каждый раз, прежде чем он будет использоваться бэкэнд. Но статический тип проверяет игрок флага как неизвестный внутри Lambda. Есть ли способ ввести намек на аргумент, переданную в Lambda как тип = игрок, который является классом приложения? Или лучше, тип подскажите на завод как < /p>
param_type_factory: Dict[
str,
Callable[[], Any]
]
< /code>
Таким образом, фабрика всегда получает экземпляр объекта = объект класса округа /> Текущий декоратор: < /p>
def tool_action(
description: str,
param_model_factory: Any, #
Текущий collect_tools для метода бэкэнда в классе Player: < /p>
def _collect_tools(self) -> List[ActionTool]:
tools: List[ActionTool] = []
for attr_name, method in inspect.getmembers(self, predicate=inspect.ismethod):
# check for "_tool_meta" attribute in own methods
meta = getattr(method, "_tool_meta", None)
if not meta:
continue

if callable(meta.get("param_model_factory")):
# factory returns a schema dict
new_sig = meta["param_model_factory"](self)
else:
new_sig = {}
# Create ActionTool
tools.append(
ActionTool(
func=method,
name=meta["name"],
description=meta["description"],
signature=new_sig,
)
)
return tools
< /code>
param_type_factory используется в коллекции с помощью экземпляра класса, в котором он находится (игрок). Все это работает во время выполнения. Я хочу исправить подсказки статического типа для param_factory, особенно, что объект типа «окружающий класс» передается. Возвращение объекта действия: < /p>
@action
def attack_action(self):
return Action(
attack,
param_type_factory={
"target": Tuple[self.opponents]
}
)

def attack(self, target):
...
< /code>
Но это сложно разделить метаданные от логики. Как написать более краткий, тип-безопасный/тип ритм/декоратор?

Подробнее здесь: https://stackoverflow.com/questions/797 ... in-wrapper
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Тип-хит-хранение класса функции в обертке
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как получить выбранную информацию в панели-обертке в WPF?
    Гость » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Гость
  • Swiperjs - наполнение на обертке
    Anonymous » » в форуме CSS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как реализовать уведомления об обертке свойств в рамках в разных контекстах в Swift?
    Anonymous » » в форуме IOS
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как реализовать уведомления об обертке свойств в рамках в разных контекстах в Swift?
    Anonymous » » в форуме IOS
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

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