4.2. Dataclass Define Basic¶
4.2.1. Required Fields¶
>>> from dataclasses import dataclass
>>>
>>>
>>> @dataclass
... class Astronaut:
... firstname: str
... lastname: str
4.2.2. Default Fields¶
>>> from dataclasses import dataclass
>>>
>>>
>>> @dataclass
... class Astronaut:
... firstname: str
... lastname: str
... agency: str = 'NASA'
4.2.3. Lists¶
>>> from dataclasses import dataclass
>>>
>>>
>>> @dataclass
... class Astronaut:
... firstname: str
... lastname: str
... missions: list[str]
4.2.4. Assignments¶
"""
* Assignment: Dataclass DefineBasic Syntax
* Complexity: easy
* Lines of code: 4 lines
* Time: 3 min
English:
1. Use Dataclass to define class `Point` with attributes:
a. `x: int` with default value `0`
b. `y: int` with default value `0`
2. Run doctests - all must succeed
Polish:
1. Użyj Dataclass do zdefiniowania klasy `Point` z atrybutami:
a. `x: int` z domyślną wartością `0`
b. `y: int` z domyślną wartością `0`
2. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> from inspect import isclass
>>> from dataclasses import is_dataclass
>>> assert isclass(Point), 'Point is not a class'
>>> assert is_dataclass(Point), 'Point is not a dataclass, add decorator'
>>> assert hasattr(Point, 'x')
>>> assert hasattr(Point, 'y')
>>> Point()
Point(x=0, y=0)
>>> Point(x=0, y=0)
Point(x=0, y=0)
>>> Point(x=1, y=2)
Point(x=1, y=2)
"""
from dataclasses import dataclass
# Use Dataclass to define class `Point` with attributes `x` and `y`
# type: Type
class Point:
...
"""
* Assignment: Dataclass DefineBasic Flat
* Complexity: easy
* Lines of code: 8 lines
* Time: 3 min
English:
1. You received input data in JSON format from the API
2. Using `dataclass` model data to create class `Pet`
3. Run doctests - all must succeed
Polish:
1. Otrzymałeś z API dane wejściowe w formacie JSON
2. Wykorzystując `dataclass` zamodeluj dane aby stwórzyć klasę `Pet`
3. Uruchom doctesty - wszystkie muszą się powieść
References:
[1]: https://petstore.swagger.io/#/pet/getPetById
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> from inspect import isclass
>>> from dataclasses import is_dataclass
>>> import json
>>> assert isclass(Pet)
>>> assert is_dataclass(Pet)
>>> fields = {'id', 'category', 'name', 'photoUrls', 'tags', 'status'}
>>> assert set(Pet.__dataclass_fields__.keys()) == fields, \
f'Invalid fields, your fields should be: {fields}'
>>> data = json.loads(DATA)
>>> result = Pet(**data)
>>> result # doctest: +NORMALIZE_WHITESPACE
Pet(id=0, category='dogs', name='doggie', photoUrls='img/dogs/0.png',
tags=['dog', 'hot-dog'], status='available')
"""
from dataclasses import dataclass
DATA = """
{
"id": 0,
"category": "dogs",
"name": "doggie",
"photoUrls": "img/dogs/0.png",
"tags": ["dog", "hot-dog"],
"status": "available"
}
"""
# Using `dataclass` model data to create class `Pet`
# type: Type
class Pet:
...
"""
* Assignment: Dataclass DefineBasic Flat
* Complexity: easy
* Lines of code: 8 lines
* Time: 3 min
English:
1. You received input data in JSON format from the API
2. Using `dataclass` model data to create class `Pet`
3. Run doctests - all must succeed
Polish:
1. Otrzymałeś z API dane wejściowe w formacie JSON
2. Wykorzystując `dataclass` zamodeluj dane aby stwórzyć klasę `Pet`
3. Uruchom doctesty - wszystkie muszą się powieść
References:
[1]: https://petstore.swagger.io/#/pet/getPetById
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> from inspect import isclass
>>> from dataclasses import is_dataclass
>>> import json
>>> assert isclass(Pet)
>>> assert is_dataclass(Pet)
>>> fields = {'id', 'category', 'name', 'photoUrls', 'tags', 'status'}
>>> assert set(Pet.__dataclass_fields__.keys()) == fields, \
f'Invalid fields, your fields should be: {fields}'
>>> data = json.loads(DATA)
>>> result = Pet(**data)
>>> result # doctest: +NORMALIZE_WHITESPACE
Pet(id=0, category='dogs', name='doggie', photoUrls='img/dogs/0.png',
tags=['dog', 'hot-dog'], status='available')
"""
from dataclasses import dataclass
DATA = """
{
"id": 0,
"category": "dogs",
"name": "doggie",
"photoUrls": "img/dogs/0.png",
"tags": ["dog", "hot-dog"],
"status": "available"
}
"""
# Using `dataclass` model data to create class `Pet`
# type: Type
class Pet:
...