TelenkovDmitry 8 miesięcy temu
rodzic
commit
a8bf02c349
1 zmienionych plików z 62 dodań i 0 usunięć
  1. 62 0
      courses/python_oop/inheritance/mixin_3.py

+ 62 - 0
courses/python_oop/inheritance/mixin_3.py

@@ -0,0 +1,62 @@
+
+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
+
+    
+def main():
+    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()