Типы аннотаций для классов с именами динамических атрибутов

avatar
Timmmm
1 июля 2021 в 15:58
122
1
0

У меня есть класс, который использует свои атрибуты как словарь. Вот так:

class Foo:

  def set(self, name: str, value: int):
    setattr(self, name, value)

  def get(self, name: str) -> Optional[int]:
    return getattr(self, name, None)

Есть ли способ записать аннотацию типа, чтобы указать, что все переменные-члены являются int (если они есть)? В идеале так, как понимает Pyright.

Источник

Ответы (1)

avatar
Timmmm
1 июля 2021 в 16:03
0

Этот синтаксис работает частично:

class Foo:
  __dict__: dict[str, int]

  def set(self, name: str, value: int):
    setattr(self, name, value)

  def get(self, name: str) -> Optional[int]:
    return getattr(self, name, None)

Это допустимый синтаксис, и это означает, что Pyright рассматривает self.__dict__ как правильный тип. К сожалению, не совсем разумно менять возвращаемый тип getattr(), который по-прежнему возвращает Any, но это лучше, чем ничего!