#python #python-typing #class-variables
Вопрос:
У меня есть класс Python, подобный приведенному ниже:
from typing import ClassVar
class Foo:
bar: ClassVar[int] = 1
def __init__(self):
self.spam: int = 2
Как я могу проверить этот класс Foo
, чтобы получить ClassVar
s и их значения?
Я ищу что-то подобное {"bar": 1}
, и мне нужно, чтобы это работало для Python 3.8 .
Ответ №1:
Вы можете сделать это, просмотрев __annotations__
словарь класса.
from typing import ClassVar
class Foo:
bar: ClassVar[int] = 1
def __init__(self):
self.spam: int = 2
for attr, cls in Foo.__annotations__.items():
print(f'{attr=}, {cls=}, value={getattr(Foo, attr)}')
Выход:
attr='bar', cls=typing.ClassVar[int], value=1
Ответ №2:
Ввод текста здесь кажется совершенно неуместным. В любом случае, чтобы получить атрибуты объекта, вы всегда можете попытаться проверить пространство имен объекта. Для объекта класса,
vars(Foo)
Сработало бы. Однако имейте в виду, что это вернет буквальное пространство имен, поэтому, если вы хотите изменить этот диктант независимо от класса, вам необходимо создать копию. В данном случае простая неглубокая копия:
dict(vars(Foo))
Было бы достаточно.