Skip to content

Instantly share code, notes, and snippets.

@gamesbook
Created March 7, 2021 06:21
Show Gist options
  • Save gamesbook/f3193d525faa9395e36b100a7369c700 to your computer and use it in GitHub Desktop.
Save gamesbook/f3193d525faa9395e36b100a7369c700 to your computer and use it in GitHub Desktop.
Example of dataclass with property
from dataclasses import dataclass
from typing import List, Tuple
@dataclass(frozen=True)
class Position:
name: str
dates: List[int]
items: Tuple
lon: float = 0.0
lat: float = 0.0
@property
def sorted_items(self):
if self.items:
return tuple(sorted(list(self.items)))
return ()
p = Position(name="NullIsle", items=('d','c'), dates=[0,1,2], lon=1.1, lat=2.2)
print(p, p.lon)
try:
p.lat = 1.0 # simple type cannot be changed
print(p, p.lat)
except Exception as err:
print(err)
p.dates[0] = 10 # list values are NOT immutable in frozen dataclass
print(p, p.dates)
p.dates.append(20) # list is NOT immutable in frozen dataclass
print(p, p.dates)
p.dates.append('x') # list "type" not enforced in frozen dataclass
print(p, p.dates)
# p.items = ('c', 'd') # tuple is an immutable type in Python
print(p.sorted_items)
q = Position(name="NullIsle", items=['d','c'], dates=[0,1,2], lon=1.1, lat=2.2)
print(q.items) # type not enforced
print(q.sorted_items)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment