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): # print(vars(self)) print(json.dumps(self, default = lambda x:x.__dict__)) return self.__dict__ 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) ''' 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()