Есть ли элегантный способ использовать атрибут класса в качестве аннотации типа?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли элегантный способ использовать атрибут класса в качестве аннотации типа?

Сообщение Anonymous »

Используя ту же парадигму, что и в RDF, я моделирую класс и его нелитеральные атрибуты, что и идентификатор для ссылочного объекта, например, URI в RDF.GUID = NewType("GUID", int) # create a subclass of int

print(GUID.__name__) # prints 'GUID'

class Person:
id: GUID
parents: list["PersonId"]

Когда дело доходит до определения Personid , у меня есть этот кусок кода:
def field_info(class_model: type, attr_name: str) -> tuple[type, str, Any]:
attributes = inspect.get_annotations(class_model)
assert attr_name in attributes
return (class_model, attr_name, attributes[attr_name])

PersonId = TypeAliasType("PersonId", Annotated[GUID, field_info(Person, "id")]) # create an alias of GUID.

и в коде, вблизи сериализации/десериализации в DB, у меня есть чеки, подобные тем, чтобы убедиться, что тип аннотации соответствует типу атрибута.
(я взял пример для упрощения.assert Person.__name__ == "Person" # true
assert isinstance(PersonId, typing.TypeAliasType) # true
origin = get_origin(PersonId.__value__)
args = get_args(PersonId.__value__)
assert origin is Annotated # true
assert args[0] is GUID # true
assert args[1] == (Person, "id", GUID) # true
assert args[0] == args[1][2] # true
< /code>
Есть ли способ напрямую определить < /p>
PersonId = TypeAliasType("PersonId", Person.id) #AttributeError: type object 'Person' has no attribute 'id'


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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