Search
Write a publication
Pull to refresh
0
0
Качурин Антон @outcatcher

User

Send message

В Python у циклов (как и у if) вообще нет своей области видимости, можно переменную вообще первый раз внутри цикла присвоить, и снаружи потом использовать. Если не присвоишь - просто будет NameError

>>> for i in range(10):
...   a = 2
... 
>>> print(i)
9
>>> print(a)
2
>>> print(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined

В 95% случаев, имхо, dataclasses не нужны. Только если нужны мутабельные контейнеры — их на NamedTuple не сделаешь. Плюс, в typing.NamedTuple нельзя переопределять некоторые методы, а точнее:


# attributes prohibited to set in NamedTuple class syntax
_prohibited = ('__new__', '__init__', '__slots__', '__getnewargs__',
               '_fields', '_field_defaults', '_field_types',
               '_make', '_replace', '_asdict', '_source')
Ещё есть отличный способ — наследование от
typing.NamedTuple
. Работает так же, выглядит прилично.


class A(typing.NamedTuple):
    field: int
    field_with_default: int = 3

Information

Rating
Does not participate
Location
Воронеж, Воронежская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Test Automation Engineer
Senior
Python
Golang