mixin_3.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import json
  2. class PermissionnMixin:
  3. def __init__(self):
  4. self.permissions = set()
  5. def grant_permission(self, permission):
  6. self.permissions.add(permission)
  7. def revoke_permission(self, permission):
  8. self.permissions.discard(permission)
  9. def has_permission(self, permission):
  10. return permission in self.permissions
  11. class User(PermissionnMixin):
  12. def __init__(self, name, email):
  13. super().__init__()
  14. self.name = name
  15. self.email = email
  16. # --------------------------------------------------
  17. class JsonSerializableMixin:
  18. def to_json(self):
  19. return json.dumps(self.__dict__)
  20. class Car(JsonSerializableMixin):
  21. def __init__(self, make: str, color: str):
  22. self.make = make
  23. self.color = color
  24. # --------------------------------------------------
  25. class DictMixin:
  26. def to_dict(self):
  27. # print(vars(self))
  28. print(json.dumps(self, default = lambda x:x.__dict__))
  29. return self.__dict__
  30. class Phone(DictMixin):
  31. def __init__(self, number):
  32. self.number = number
  33. class Person(DictMixin):
  34. def __init__(self, name, age, address):
  35. self.name = name
  36. self.age = age
  37. self.address = address
  38. class Address(DictMixin):
  39. def __init__(self, street, city, state, zip_code):
  40. self.street = street
  41. self.city = city
  42. self.state = state
  43. self.zip_code = zip_code
  44. class Company(DictMixin):
  45. def __init__(self, name, address):
  46. self.name = name
  47. self.address = address
  48. def main():
  49. # car = Car("Toyota", "red")
  50. # print(car.__dict__)
  51. # print(vars(car))
  52. # # print(car.to_json())
  53. # assert car.to_json() == '{"make": "Toyota", "color": "red"}'
  54. address = Address("123 Main St", "Anytown", "CA", "12345")
  55. john_doe = Person("John Doe", 30, address)
  56. john_doe_dict = john_doe.to_dict()
  57. print(john_doe_dict)
  58. '''
  59. assert john_doe_dict == {
  60. 'name': 'John Doe',
  61. 'age': 30,
  62. 'address': {
  63. 'street': '123 Main St',
  64. 'city': 'Anytown',
  65. 'state': 'CA',
  66. 'zip_code': '12345'
  67. }
  68. }
  69. '''
  70. '''
  71. user1 = User('Alice', 'alice@example.com')
  72. user2 = User('Bob', 'bob@example.com')
  73. assert user1.email == 'alice@example.com'
  74. assert user1.name == 'Alice'
  75. assert user1.permissions == set()
  76. assert user2.email == 'bob@example.com'
  77. assert user2.name == 'Bob'
  78. assert user2.permissions == set()
  79. user1.grant_permission('read')
  80. user1.grant_permission('write')
  81. user2.grant_permission('read')
  82. assert user1.permissions == {'read', 'write'}
  83. assert user2.permissions == {'read'}
  84. assert user1.has_permission('read') is True
  85. assert user1.has_permission('write') is True
  86. assert user1.has_permission('execute') is False
  87. assert user2.has_permission('read') is True
  88. assert user2.has_permission('write') is False
  89. assert user2.has_permission('execute') is False
  90. user1.revoke_permission('write')
  91. user1.revoke_permission('execute')
  92. assert user1.has_permission('read') is True
  93. assert user1.has_permission('write') is False
  94. assert user1.has_permission('execute') is False
  95. print('Good')
  96. '''
  97. if __name__ == '__main__':
  98. main()