Examples
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/.vscode
|
||||||
|
__pycache__
|
||||||
35
generics_1.py
Normal file
35
generics_1.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
from lib.gen_1 import (
|
||||||
|
Employee,
|
||||||
|
EmployeeContainer,
|
||||||
|
Partner,
|
||||||
|
PartnerContainer,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
employees = EmployeeContainer(
|
||||||
|
[
|
||||||
|
Employee(id=1, first_name="Pero", last_name="Perić", department="Dev"),
|
||||||
|
Employee(id=2, first_name="Mirko", last_name="Mirković", department="Dev"),
|
||||||
|
Employee(id=3, first_name="Ivo", last_name="Ivić", department="Sales"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
partners = PartnerContainer(
|
||||||
|
[
|
||||||
|
Partner(id=101, first_name="Ante", last_name="Antić", company="CocaCola"),
|
||||||
|
Partner(id=102, first_name="Šime", last_name="Šimić", company="CocaCola"),
|
||||||
|
Partner(id=103, first_name="Mate", last_name="Matić", company="Pepsi"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
user = employees.get_user_by_id(id=2)
|
||||||
|
print("Found user:", user)
|
||||||
|
|
||||||
|
cocacola_partners = partners.get_by_company(company="CocaCola")
|
||||||
|
for partner in cocacola_partners:
|
||||||
|
print(partner)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
0
generics_1_lib.py
Normal file
0
generics_1_lib.py
Normal file
47
generics_2.py
Normal file
47
generics_2.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
from lib.gen_2 import (
|
||||||
|
Employee,
|
||||||
|
EmployeeContainer,
|
||||||
|
Partner,
|
||||||
|
PartnerContainer,
|
||||||
|
UserContainer,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
users = UserContainer[Employee](
|
||||||
|
[
|
||||||
|
Employee(id=1, first_name="Pero", last_name="Perić", department="Dev"),
|
||||||
|
Employee(id=2, first_name="Mirko", last_name="Mirković", department="Dev"),
|
||||||
|
Employee(id=3, first_name="Ivo", last_name="Ivić", department="Sales"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
users[0]
|
||||||
|
|
||||||
|
employees = EmployeeContainer(
|
||||||
|
[
|
||||||
|
Employee(id=1, first_name="Pero", last_name="Perić", department="Dev"),
|
||||||
|
Employee(id=2, first_name="Mirko", last_name="Mirković", department="Dev"),
|
||||||
|
Employee(id=3, first_name="Ivo", last_name="Ivić", department="Sales"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
employees[0]
|
||||||
|
|
||||||
|
partners = PartnerContainer(
|
||||||
|
[
|
||||||
|
Partner(id=101, first_name="Ante", last_name="Antić", company="CocaCola"),
|
||||||
|
Partner(id=102, first_name="Šime", last_name="Šimić", company="CocaCola"),
|
||||||
|
Partner(id=103, first_name="Mate", last_name="Matić", company="Pepsi"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
partners[0]
|
||||||
|
|
||||||
|
employee = employees.get_user_by_id(id=2)
|
||||||
|
print("Found user:", employee)
|
||||||
|
|
||||||
|
cocacola_partners = partners.get_by_company(company="CocaCola")
|
||||||
|
for partner in cocacola_partners:
|
||||||
|
print(partner)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
33
generics_func.py
Normal file
33
generics_func.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
from typing import Dict, TypeVar
|
||||||
|
|
||||||
|
|
||||||
|
K = TypeVar("K")
|
||||||
|
V = TypeVar("V")
|
||||||
|
|
||||||
|
|
||||||
|
def get_item(values: Dict[K, V], key: K) -> V:
|
||||||
|
return values[key]
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
str_keys: Dict[str, int] = {
|
||||||
|
"prvi": 1,
|
||||||
|
"drugi": 2,
|
||||||
|
"treći": 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
a = get_item(str_keys, "drugi")
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
int_keys: Dict[int, str] = {
|
||||||
|
1: "prvi",
|
||||||
|
2: "drugi",
|
||||||
|
3: "treći",
|
||||||
|
}
|
||||||
|
|
||||||
|
a = get_item(int_keys, 3)
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
0
lib/__init__.py
Normal file
0
lib/__init__.py
Normal file
37
lib/gen_1.py
Normal file
37
lib/gen_1.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class UserBase:
|
||||||
|
id: int
|
||||||
|
first_name: str
|
||||||
|
last_name: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Employee(UserBase):
|
||||||
|
department: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Partner(UserBase):
|
||||||
|
company: str
|
||||||
|
|
||||||
|
|
||||||
|
class UserContainer(list):
|
||||||
|
def get_user_by_id(self, id: int) -> Optional[UserBase]:
|
||||||
|
for user in self:
|
||||||
|
if user.id == id:
|
||||||
|
return user
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
class EmployeeContainer(UserContainer):
|
||||||
|
def get_by_department(self, department: str) -> List[Employee]:
|
||||||
|
return [user for user in self if user.department == department]
|
||||||
|
|
||||||
|
|
||||||
|
class PartnerContainer(UserContainer):
|
||||||
|
def get_by_company(self, company: str) -> List[Partner]:
|
||||||
|
return [user for user in self if user.company == company]
|
||||||
40
lib/gen_2.py
Normal file
40
lib/gen_2.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Generic, List, Optional, TypeVar
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class UserBase:
|
||||||
|
id: int
|
||||||
|
first_name: str
|
||||||
|
last_name: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Employee(UserBase):
|
||||||
|
department: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Partner(UserBase):
|
||||||
|
company: str
|
||||||
|
|
||||||
|
|
||||||
|
UserContainerType = TypeVar("UserContainerType", bound=UserBase)
|
||||||
|
|
||||||
|
|
||||||
|
class UserContainer(List[UserContainerType]):
|
||||||
|
def get_user_by_id(self, id: int) -> Optional[UserContainerType]:
|
||||||
|
for user in self:
|
||||||
|
if user.id == id:
|
||||||
|
return user
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
class EmployeeContainer(UserContainer[Employee]):
|
||||||
|
def get_by_department(self, department: str) -> List[Employee]:
|
||||||
|
return [user for user in self if user.department == department]
|
||||||
|
|
||||||
|
|
||||||
|
class PartnerContainer(UserContainer[Partner]):
|
||||||
|
def get_by_company(self, company: str) -> List[Partner]:
|
||||||
|
return [user for user in self if user.company == company]
|
||||||
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
pydantic
|
||||||
Reference in New Issue
Block a user