рдкрд╛рдпрдерди 3.7 рдореЗрдВ рд╢реБрд░реВ рдХреА рдЧрдИ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕реЗрд╕ рд╣реИред рд╡реЗ рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдкреАрдврд╝реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реЗ рдХрд╛рдо рдХреЗ рдЕрдиреНрдп рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреА рддреБрд▓рдирд╛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЯреНрдпреВрдкрд▓реНрд╕" рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдкрд░рд┐рдЪрдп
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ 3.7 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ:
class RegularBook: def __init__(self, title, author): self.title = title self.author = author
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЕрддрд┐рд░реЗрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рд╢реАрд░реНрд╖рдХ рдФрд░ рд▓реЗрдЦрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдЧ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпрд╛рдБ __eq__
рдФрд░ __eq__
рднреА __eq__
ред
dataclasses
рдореЙрдбреНрдпреВрд▓ рдореЗрдВ @dataclass
рдбреЗрдХреЛрд░реЗрдЯрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдПрдХ рд╕рдорд╛рди рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
from dataclasses import dataclass @dataclass class Book: title: str author: str
рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдРрд╕реЗ рд╕рднреА рдлрд╝реАрд▓реНрдб рдЬрд┐рдирдореЗрдВ рдЯрд╛рдЗрдк рдорд╛рд░реНрдХреНрд╕ рдирд╣реАрдВ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк typing
рдореЙрдбреНрдпреВрд▓ рд╕реЗ Any
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ? рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде __init__
, __eq__
, __eq__
рдФрд░ __eq__
ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдк рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдордирдорд╛рдирд╛ рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
>>> book = Book(title="Fahrenheit 451", author="Bradbury") >>> book Book(title='Fahrenheit 451', author='Bradbury') >>> book.author 'Bradbury' >>> other = Book("Fahrenheit 451", "Bradbury") >>> book == other True
рд╡рд┐рдХрд▓реНрдк
рддреБрдХ рдпрд╛ рд╢рдмреНрджрдХреЛрд╖
рдмреЗрд╢рдХ, рдпрджрд┐ рд╕рдВрд░рдЪрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдпрд╛ рдЯрдкрд▓ рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:
book = ("Fahrenheit 451", "Bradbury") other = {'title': 'Fahrenheit 451', 'author': 'Bradbury'}
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:
- рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЪрд░ рдореЗрдВ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
- рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢рдмреНрджрдХреЛрд╢
{'name': 'Fahrenheit 451', 'author': 'Bradbury'}
рдРрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рднреА рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реЛрдВрдЧреЗред - рдЯрдкрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдХреНрд░рдо рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ рд╣реИред
рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ:
Namedtuple
from collections import namedtuple NamedTupleBook = namedtuple("NamedTupleBook", ["title", "author"])
рдпрджрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред
>>> book = NamedTupleBook("Fahrenheit 451", "Bradbury") >>> book.author 'Bradbury' >>> book NamedTupleBook(title='Fahrenheit 451', author='Bradbury') >>> book == NamedTupleBook("Fahrenheit 451", "Bradbury")) True
рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдирддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдирд╛рдорд┐рдд рдЯреБрдкрд▓реНрд╕ рдХреА рдЕрдкрдиреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВред рд╡реЗ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдХрд┐ рдЯреНрдпреВрдкрд▓реНрд╕ рдирд╛рдо рдЕрднреА рднреА рдЯреНрдпреВрдкрд▓реНрд╕ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдЕрднреА рднреА рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
>>> Car = namedtuple("Car", ["model", "owner"]) >>> book = NamedTupleBook("Fahrenheit 451", "Bradbury")) >>> book == Car("Fahrenheit 451", "Bradbury") True
рджреВрд╕рд░рд╛, рдЯреБрдкрд▓реНрд╕ рдирд╛рдо рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЕрдВрдд рдореЗрдВ, рдЖрдк рдПрдХ рдирд╛рдорд┐рдд рдЯрдкрд▓ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреБрдирд░рд╛рд╡реГрддрд┐ред
рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ
рдпрджрд┐ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд▓рдЧреНрди рд╣реИ ред рдпрд╣ рдбреЗрдЯрд╛рд╕рд╛рд▓ рд╕реЗ рднреА рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдЬрдЧрд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдЬреИрд╕реЗ 2.7 рдФрд░ 3.4 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдпрд╣ рддрдереНрдп рдХрд┐ рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╕реГрдЬрди
рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк @dataclass
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд░реНрдЧ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд░рд┐рдгрд╛рдореА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реАрдХреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, make_dataclass
рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рдирд╛рдорд┐рдд рдЯреНрдпреВрдкрд▓реНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
from dataclasses import make_dataclass Book = make_dataclass("Book", ["title", "author"]) book = Book("Fahrenheit 451", "Bradbury")
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди
рдПрдХ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реИред __init__
рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╕реАрдзреЗ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
@dataclass class Book: title: str = "Unknown" author: str = "Unknown author"
рдЙрдиреНрд╣реЗрдВ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП __init__
рд╡рд┐рдзрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛
>>> Book() Book(title='Unknown', author='Unknown author') >>> Book("Farenheit 451") Book(title='Farenheit 451', author='Unknown author')
рд▓реЗрдХрд┐рди рдирд┐рдпрдорд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдореНрдпреВрдЯ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реВрдЪреА рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдиреАрдЪреЗ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрд╕ рдХреНрд░рдо рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ __init__
рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдирдХреЗ рдЖрджреЗрд╢ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕реЗрд╕
рдирд╛рдорд┐рдд рдЯреБрдкрд▓реНрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдХреНрд╖рд╛ рдмрдирд╛рддреЗ рд╕рдордп рдХреЗрд╡рд▓ frozen=True
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ FrozenInstanceError
рдЕрдкрд╡рд╛рдж рдХреЛ FrozenInstanceError
рдЬрд╛рдПрдЧрд╛ред
@dataclass(frozen=True) class Book: title: str author: str
>>> book = Book("Fahrenheit 451", "Bradbury") >>> book.title = "1984" dataclasses.FrozenInstanceError: cannot assign to field 'title'
рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕ рд╕реЗрдЯрд┐рдВрдЧ
frozen
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, @dataclass
рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
init
: рдЕрдЧрд░ рдпрд╣ True
(рдбрд┐рдлрд╝реЙрд▓реНрдЯ), рддреЛ __init__
рд╡рд┐рдзрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд╡рд░реНрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ __init__
рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредrepr
: __repr__
рд╡рд┐рдзрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ) рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рдЙрддреНрдкрдиреНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдФрд░ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдирд╛рдо рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)eq
: __eq__
рд╡рд┐рдзрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ) рд╕рдХреНрд╖рдо __eq__
рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рд╡рд╛рд▓реЗ рдЯреБрдкрд▓реНрд╕ рдереЗред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЯрд╛рдЗрдк рдорд┐рд▓рд╛рди рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИредorder
рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдВрдж рд╣реИ) __lt__
, __le__
, __gt__
рдФрд░ __ge__
ред рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдЙрд╕реА рддрд░рд╣ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреИрд╕реЗ рдлреАрд▓реНрдб рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреНрдпреВрдкрд▓реНрд╕ рдореЗрдВред рдЙрд╕реА рд╕рдордп, рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рдХрд╛рд░ рднреА рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ order
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди eq
рдирд╣реАрдВ рд╣реИ, рддреЛ ValueError
рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рде рд╣реА, рд╡рд░реНрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреБрд▓рдирд╛рддреНрдордХ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПредunsafe_hash
__hash__
рдкрджреНрдзрддрд┐ рдХреА рдкреАрдврд╝реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ eq
рдФрд░ frozen
рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ
рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдирдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝реАрд▓реНрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝реАрд▓реНрдб рддрдХ рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджреЛрд╖
рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рд╕реВрдЪреА рдпрд╛ рдЕрдиреНрдп рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдЖрдк рдкреБрд╕реНрддрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдпреБрдХреНрдд "рдмреБрдХрд╢реЗрд▓реНрдлрд╝" рд╡рд░реНрдЧ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
@dataclass class Bookshelf: books: List[Book] = []
рджреБрднрд╛рд╖рд┐рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛:
ValueError: mutable default <class 'list'> for field books is not allowed: use default_factory
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА рдФрд░ рдЧрд▓рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬрдиреНрдо рджреЗрдЧреАред
рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, field
рдлрд╝рдВрдХреНрд╢рди рдХреЗ default_factory
рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорд╛рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдпрд╛ рдХрд╛рд░реНрдп рдХреЛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд░реНрдЧ рдХрд╛ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
@dataclass class Bookshelf: books: List[Book] = field(default_factory=list)
рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк
рдирд┐рд░реНрджрд┐рд╖реНрдЯ default_factory
рдЕрд▓рд╛рд╡рд╛, рдлрд╝реАрд▓реНрдб рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рдореНрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
default
: default
рдорд╛рдиред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ field
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реАрд▓реНрдб рдорд╛рди рдмрджрд▓рддрд╛ рд╣реИредinit
: __init__
рд╡рд┐рдзрд┐ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ)repr
: __repr__
рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ)compare
рдореЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ ( __eq__
, __le__
рдФрд░ рдЕрдиреНрдп) рд╢рд╛рдорд┐рд▓ рд╣реИрдВhash
: рдПрдХ рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп рдпрд╛ None
рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ True
, рддреЛ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ None
(рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ) рдирд┐рд░реНрджрд┐рд╖реНрдЯ None
, рддреЛ compare
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
hash=False
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ hash=False
рдХрд┐рд╕реА рджрд┐рдП рдЧрдП compare=True
рд▓рд┐рдП hash=False
compare=True
рдХреНрд╖реЗрддреНрд░ рдХреА рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдмрдХрд┐ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИредmetadata
: рдХрд╕реНрдЯрдо рд╢рдмреНрджрдХреЛрд╢ рдпрд╛ None
ред рдорд╛рди рдХреЛ MappingProxyType
рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛ рдЬрд╛рдПред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред
рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдпрджрд┐ рдСрдЯреЛ-рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ __post_init__
рд╡рд┐рдзрд┐ __post_init__
рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕реЗ self.__post_init__()
рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ self.__post_init__()
, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ InitVar
рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ __init__
рд╡рд┐рдзрд┐ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддреЛ __post_init__
рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЙрддреНрдкрдиреНрди рдкреБрд╕реНрддрдХ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ
@dataclass class Book: title: str author: str desc: str = None def __post_init__(self): self.desc = self.desc or "`%s` by %s" % (self.title, self.author)
>>> Book("Fareneheit 481", "Bradbury") Book(title='Fareneheit 481', author='Bradbury', desc='`Fareneheit 481` by Bradbury')
рдХреЗрд╡рд▓ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░
__post_init__
рдореЗрдердб рд╕реЗ рдЬреБрдбрд╝реА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗрд╡рд▓ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐, рдХрд┐рд╕реА рдХреНрд╖реЗрддреНрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп, InitVar
рдХреЛ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорд╛рди __post_init__
рд╡рд┐рдзрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдРрд╕реЗ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@dataclass class Book: title: str author: str gen_desc: InitVar[bool] = True desc: str = None def __post_init__(self, gen_desc: str): if gen_desc and self.desc is None: self.desc = "`%s` by %s" % (self.title, self.author)
>>> Book("Fareneheit 481", "Bradbury") Book(title='Fareneheit 481', author='Bradbury', desc='`Fareneheit 481` by Bradbury') >>> Book("Fareneheit 481", "Bradbury", gen_desc=False) Book(title='Fareneheit 481', author='Bradbury', desc=None)
рд╡рд┐рд░рд╛рд╕рдд
рдЬрдм рдЖрдк @dataclass
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдореВрд▓ рд╡рд░реНрдЧреЛрдВ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЦреЗрддреЛрдВ рдХреЛ рдПрдХ рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдмрдЪрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдкреНрд░реЛрд╕реЗрд╕реНрдб рдХреНрд▓рд╛рд╕ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╕рднреА рдЙрддреНрдкрдиреНрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдкрд░рд┐рдгрд╛рдорд┐рдд рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдореВрд▓ рд╡рд░реНрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЪреВрдВрдХрд┐ рдЖрджреЗрд╢рд┐рдд рд╢рдмреНрджрдХреЛрд╢ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреНрд░рдо рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ
@dataclass class BaseBook: title: Any = None author: str = None @dataclass class Book(BaseBook): desc: str = None title: str = "Unknown"
рдЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ __init__
рд╡рд┐рдзрд┐ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рдПрдЧреА:
def __init__(self, title: str="Unknown", author: str=None, desc: str=None)