В Python 3.7 статические поля могут быть аннотированы следующим синтаксисом, определенным в PEP 526 :
class A:
foo: int
Как я могу сделать эти аннотации позже, после определения класса?Я ожидаю, что сработает следующее:
A.bar : float
Однако, похоже, что оно не имеет идентичного эффекта с первым кодом.Когда мы смотрим на A
__dict___
, эти два фрагмента не имеют одинакового эффекта.
После примера 1 и после примера 2 мы получаем идентичные __dict__
то есть второй пример должен показывать эффект где-то еще.Созданное изречение:
>> pprint(A.__dict__):
mappingproxy({'__annotations__': {'foo': <class 'int'>}, # <-!
'__dict__': <attribute '__dict__' of 'A' objects>,
'__doc__': None,
'__module__': '__main__',
'__weakref__': <attribute '__weakref__' of 'A' objects>})
Я не думаю, что редактирование __annotations__
- это «хороший» метод достижения того, чего я хочу, особенно потому, что я не уверен, что это единственный случай, когда foo
зарегистрирован.
Как правильно сделать это?