Как статически обеспечить соблюдение замороженных классов данных в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как статически обеспечить соблюдение замороженных классов данных в Python?

Сообщение Anonymous »

Я пытаюсь написать пример, в котором я хотел бы использовать экземпляр замороженного класса данных во время проверки типа и заменить его обычным классом данных, чтобы избежать затрат на создание экземпляра замороженных классов данных.
Цель состоит в том, чтобы гарантировать неизменяемость экземпляра с помощью средства проверки типов и использовать обычный класс данных во время выполнения. Вот фрагмент:

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

from dataclasses import dataclass
from typing import TYPE_CHECKING
from functools import partial

if TYPE_CHECKING:
frozen = partial(dataclass, frozen=True)
else:
frozen = dataclass

@frozen
class Foo:
x: int
y: int

foo = Foo(1, 2) # mypy complains about the number of arguments

foo.x = 3 # instead, mypy should complain here
Во время выполнения это работает должным образом, но запуск mypy вызывает эту ошибку. Пайрайт тоже выдает мне ту же ошибку:

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

foo.py:49: error: Too many arguments for "Foo"  [call-arg]
В этом фрагменте программа проверки типов может обнаружить ошибку мутации:

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

@dataclass(frozen=True)
class Foo:
x: int
y: int

foo = Foo(1, 2)

foo.x = 3 # mypy correctly catches the error here
Итак, я предполагаю, что средству проверки типов не нравится, когда я использую псевдоним «замороженный = класс данных» или «замороженный = частичный(...)» . Как мне правильно это аннотировать, чтобы средство проверки типов понимало, что это экземпляр класса данных, и не жаловалось на несовпадение количества аргументов?
P.S: Это всего лишь упражнение. Я знаю, что включить dataclass(frozen=True) намного проще, и в таких случаях мне не следует беспокоиться о производительности. Я был вдохновлен попробовать это после прочтения сообщения в блоге Тина Твртковича о том, как заморозить экземпляры класса attr во время компиляции.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли в Python модули замороженных замороженных
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Есть ли в Python модули замороженных замороженных
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как статически собрать [apache htpasswd] как статически связанный двоичный файл
    Anonymous » » в форуме Linux
    0 Ответы
    87 Просмотры
    Последнее сообщение Anonymous
  • C ++ в основном статически напечатан, в соответствии с таковой вики или статически?
    Anonymous » » в форуме C++
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Как обеспечить соблюдение семантики __restrict__ для членов данных класса (в определенных функциях)?
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

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