123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- import json
- class PermissionnMixin:
- def __init__(self):
- self.permissions = set()
- def grant_permission(self, permission):
- self.permissions.add(permission)
- def revoke_permission(self, permission):
- self.permissions.discard(permission)
- def has_permission(self, permission):
- return permission in self.permissions
-
- class User(PermissionnMixin):
- def __init__(self, name, email):
- super().__init__()
- self.name = name
- self.email = email
- # --------------------------------------------------
- class JsonSerializableMixin:
- def to_json(self):
- return json.dumps(self.__dict__)
- class Car(JsonSerializableMixin):
- def __init__(self, make: str, color: str):
- self.make = make
- self.color = color
- # --------------------------------------------------
- class DictMixin:
- def to_dict(self):
- foo = json.dumps(self, default = lambda x:x.__dict__)
- return json.loads(foo)
- class Phone(DictMixin):
- def __init__(self, number):
- self.number = number
- class Person(DictMixin):
- def __init__(self, name, age, address):
- self.name = name
- self.age = age
- self.address = address
- class Address(DictMixin):
- def __init__(self, street, city, state, zip_code):
- self.street = street
- self.city = city
- self.state = state
- self.zip_code = zip_code
- class Company(DictMixin):
- def __init__(self, name, address):
- self.name = name
- self.address = address
- def main():
- # car = Car("Toyota", "red")
- # print(car.__dict__)
- # print(vars(car))
- # # print(car.to_json())
- # assert car.to_json() == '{"make": "Toyota", "color": "red"}'
- address = Address("123 Main St", "Anytown", "CA", "12345")
- john_doe = Person("John Doe", 30, address)
- john_doe_dict = john_doe.to_dict()
- print(john_doe_dict)
- print(type(john_doe_dict))
- assert john_doe_dict == {
- 'name': 'John Doe',
- 'age': 30,
- 'address': {
- 'street': '123 Main St',
- 'city': 'Anytown',
- 'state': 'CA',
- 'zip_code': '12345'
- }
- }
- address = Address("123 Main St", "Albuquerque", "NM", "987654")
- assert address.to_dict() == {
- 'street': '123 Main St',
- 'city': 'Albuquerque',
- 'state': 'NM',
- 'zip_code': '987654'
- }
- walter = Person("Walter White", 30, address)
- assert walter.to_dict() == {'address': {'city': 'Albuquerque',
- 'state': 'NM',
- 'street': '123 Main St',
- 'zip_code': '987654'},
- 'age': 30,
- 'name': 'Walter White'}
- walter_phone = Phone("555-1234")
- walter.phone = walter_phone
- assert walter.to_dict() == {'address': {'city': 'Albuquerque',
- 'state': 'NM',
- 'street': '123 Main St',
- 'zip_code': '987654'},
- 'age': 30,
- 'name': 'Walter White',
- 'phone': {'number': '555-1234'}}
- company_address = Address("3828 Piermont Dr", "Albuquerque", "NM", "12345")
- company = Company("SCHOOL", company_address)
- assert company.to_dict() == {'address': {'city': 'Albuquerque',
- 'state': 'NM',
- 'street': '3828 Piermont Dr',
- 'zip_code': '12345'},
- 'name': 'SCHOOL'}
- jesse_address = Address("456 Oak St", "Albuquerque", "NM", "12345")
- jesse = Person("Jesse Bruce Pinkman", 27, jesse_address)
- jesse.phone = Phone("555-5678")
- fring = Person("Gustavo Fring", 55, Address("Los Pollos Hermanos", "Albuquerque", "NM", "12345"))
- fring.friends = [walter, jesse]
- assert fring.to_dict() == {'address': {'city': 'Albuquerque',
- 'state': 'NM',
- 'street': 'Los Pollos Hermanos',
- 'zip_code': '12345'},
- 'age': 55,
- 'friends': [{'address': {'city': 'Albuquerque',
- 'state': 'NM',
- 'street': '123 Main St',
- 'zip_code': '987654'},
- 'age': 30,
- 'name': 'Walter White',
- 'phone': {'number': '555-1234'}},
- {'address': {'city': 'Albuquerque',
- 'state': 'NM',
- 'street': '456 Oak St',
- 'zip_code': '12345'},
- 'age': 27,
- 'name': 'Jesse Bruce Pinkman',
- 'phone': {'number': '555-5678'}}],
- 'name': 'Gustavo Fring'}
- print('Good')
- '''
- assert john_doe_dict == {
- 'name': 'John Doe',
- 'age': 30,
- 'address': {
- 'street': '123 Main St',
- 'city': 'Anytown',
- 'state': 'CA',
- 'zip_code': '12345'
- }
- }
- '''
- '''
- user1 = User('Alice', 'alice@example.com')
- user2 = User('Bob', 'bob@example.com')
- assert user1.email == 'alice@example.com'
- assert user1.name == 'Alice'
- assert user1.permissions == set()
- assert user2.email == 'bob@example.com'
- assert user2.name == 'Bob'
- assert user2.permissions == set()
- user1.grant_permission('read')
- user1.grant_permission('write')
- user2.grant_permission('read')
- assert user1.permissions == {'read', 'write'}
- assert user2.permissions == {'read'}
- assert user1.has_permission('read') is True
- assert user1.has_permission('write') is True
- assert user1.has_permission('execute') is False
- assert user2.has_permission('read') is True
- assert user2.has_permission('write') is False
- assert user2.has_permission('execute') is False
- user1.revoke_permission('write')
- user1.revoke_permission('execute')
- assert user1.has_permission('read') is True
- assert user1.has_permission('write') is False
- assert user1.has_permission('execute') is False
- print('Good')
- '''
- if __name__ == '__main__':
- main()
|