mixin_3.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. foo = json.dumps(self, default = lambda x:x.__dict__)
  28. return json.loads(foo)
  29. class Phone(DictMixin):
  30. def __init__(self, number):
  31. self.number = number
  32. class Person(DictMixin):
  33. def __init__(self, name, age, address):
  34. self.name = name
  35. self.age = age
  36. self.address = address
  37. class Address(DictMixin):
  38. def __init__(self, street, city, state, zip_code):
  39. self.street = street
  40. self.city = city
  41. self.state = state
  42. self.zip_code = zip_code
  43. class Company(DictMixin):
  44. def __init__(self, name, address):
  45. self.name = name
  46. self.address = address
  47. def main():
  48. # car = Car("Toyota", "red")
  49. # print(car.__dict__)
  50. # print(vars(car))
  51. # # print(car.to_json())
  52. # assert car.to_json() == '{"make": "Toyota", "color": "red"}'
  53. address = Address("123 Main St", "Anytown", "CA", "12345")
  54. john_doe = Person("John Doe", 30, address)
  55. john_doe_dict = john_doe.to_dict()
  56. print(john_doe_dict)
  57. print(type(john_doe_dict))
  58. assert john_doe_dict == {
  59. 'name': 'John Doe',
  60. 'age': 30,
  61. 'address': {
  62. 'street': '123 Main St',
  63. 'city': 'Anytown',
  64. 'state': 'CA',
  65. 'zip_code': '12345'
  66. }
  67. }
  68. address = Address("123 Main St", "Albuquerque", "NM", "987654")
  69. assert address.to_dict() == {
  70. 'street': '123 Main St',
  71. 'city': 'Albuquerque',
  72. 'state': 'NM',
  73. 'zip_code': '987654'
  74. }
  75. walter = Person("Walter White", 30, address)
  76. assert walter.to_dict() == {'address': {'city': 'Albuquerque',
  77. 'state': 'NM',
  78. 'street': '123 Main St',
  79. 'zip_code': '987654'},
  80. 'age': 30,
  81. 'name': 'Walter White'}
  82. walter_phone = Phone("555-1234")
  83. walter.phone = walter_phone
  84. assert walter.to_dict() == {'address': {'city': 'Albuquerque',
  85. 'state': 'NM',
  86. 'street': '123 Main St',
  87. 'zip_code': '987654'},
  88. 'age': 30,
  89. 'name': 'Walter White',
  90. 'phone': {'number': '555-1234'}}
  91. company_address = Address("3828 Piermont Dr", "Albuquerque", "NM", "12345")
  92. company = Company("SCHOOL", company_address)
  93. assert company.to_dict() == {'address': {'city': 'Albuquerque',
  94. 'state': 'NM',
  95. 'street': '3828 Piermont Dr',
  96. 'zip_code': '12345'},
  97. 'name': 'SCHOOL'}
  98. jesse_address = Address("456 Oak St", "Albuquerque", "NM", "12345")
  99. jesse = Person("Jesse Bruce Pinkman", 27, jesse_address)
  100. jesse.phone = Phone("555-5678")
  101. fring = Person("Gustavo Fring", 55, Address("Los Pollos Hermanos", "Albuquerque", "NM", "12345"))
  102. fring.friends = [walter, jesse]
  103. assert fring.to_dict() == {'address': {'city': 'Albuquerque',
  104. 'state': 'NM',
  105. 'street': 'Los Pollos Hermanos',
  106. 'zip_code': '12345'},
  107. 'age': 55,
  108. 'friends': [{'address': {'city': 'Albuquerque',
  109. 'state': 'NM',
  110. 'street': '123 Main St',
  111. 'zip_code': '987654'},
  112. 'age': 30,
  113. 'name': 'Walter White',
  114. 'phone': {'number': '555-1234'}},
  115. {'address': {'city': 'Albuquerque',
  116. 'state': 'NM',
  117. 'street': '456 Oak St',
  118. 'zip_code': '12345'},
  119. 'age': 27,
  120. 'name': 'Jesse Bruce Pinkman',
  121. 'phone': {'number': '555-5678'}}],
  122. 'name': 'Gustavo Fring'}
  123. print('Good')
  124. '''
  125. assert john_doe_dict == {
  126. 'name': 'John Doe',
  127. 'age': 30,
  128. 'address': {
  129. 'street': '123 Main St',
  130. 'city': 'Anytown',
  131. 'state': 'CA',
  132. 'zip_code': '12345'
  133. }
  134. }
  135. '''
  136. '''
  137. user1 = User('Alice', 'alice@example.com')
  138. user2 = User('Bob', 'bob@example.com')
  139. assert user1.email == 'alice@example.com'
  140. assert user1.name == 'Alice'
  141. assert user1.permissions == set()
  142. assert user2.email == 'bob@example.com'
  143. assert user2.name == 'Bob'
  144. assert user2.permissions == set()
  145. user1.grant_permission('read')
  146. user1.grant_permission('write')
  147. user2.grant_permission('read')
  148. assert user1.permissions == {'read', 'write'}
  149. assert user2.permissions == {'read'}
  150. assert user1.has_permission('read') is True
  151. assert user1.has_permission('write') is True
  152. assert user1.has_permission('execute') is False
  153. assert user2.has_permission('read') is True
  154. assert user2.has_permission('write') is False
  155. assert user2.has_permission('execute') is False
  156. user1.revoke_permission('write')
  157. user1.revoke_permission('execute')
  158. assert user1.has_permission('read') is True
  159. assert user1.has_permission('write') is False
  160. assert user1.has_permission('execute') is False
  161. print('Good')
  162. '''
  163. if __name__ == '__main__':
  164. main()