-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.py
More file actions
62 lines (41 loc) · 1.2 KB
/
example.py
File metadata and controls
62 lines (41 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from dataclasses import dataclass
from collectibles import ListCollection
@dataclass
class Dataclass:
val1: int
val2: str
class DataclassCollection(ListCollection[Dataclass]):
val1: list[int]
val2: list[str]
@property
def val3(self) -> list[str]:
return [f"{val1}: {val2}" for val1, val2 in zip(self.val1, self.val2)]
# Usage
dataclasses = [Dataclass(1, "a"), Dataclass(2, "b"), Dataclass(3, "c")]
collection = DataclassCollection(dataclasses)
element = collection[0]
# Accessing properties
print(collection.val1) # Output: [1, 2, 3]
print(collection.val2) # Output: ["a", "b", "c"]
print(collection.val3)
collection.append(Dataclass(4, "d"))
print(collection.val1) # Output: [1, 2, 3, 4]
# Non-usage
@dataclass
class RogueDataclass:
val1: int
val2: int
dataclasses_with_rogue = [Dataclass(1, "a"), RogueDataclass(2, 3), Dataclass(3, "c")]
try:
collection = DataclassCollection(dataclasses_with_rogue)
except TypeError as e:
print(e)
# print(collection.__annotations__)
# Other
collection2 = DataclassCollection(dataclasses)
new_collection = collection + collection2
print(collection)
print(new_collection)
b = collection[1:3]
print(b)
print(collection * 2)