Python Kotlin Acess Modifier
Project description
Python Access Modifiers Library
This library provides access control mechanisms for Python classes, including Private, Protected, Internal, and Public variables and methods. Python does not enforce strict access modifiers like Java or C++, but this library uses descriptors and decorators to simulate them.
How to install
pip install PyAccessModifier
or
pip install git+https://github.com/howShouldIChooseMyUsername/PyAccessModifier.git
Setup
from PyAcessModifier import * # Recommended
# or
import PyAcessModifier
Variable Descriptors
1. Private
- Purpose: Restrict access to the variable only within the defining class.
- Example:
class MyClass:
my_private = Private(42)
- Behavior:
- Reading or writing from outside the class raises
PermissionError. - Only instances of the defining class can access the value.
- Reading or writing from outside the class raises
2. Protected
- Purpose: Allow access only from the defining class and its subclasses.
- Example:
class MyClass:
my_protected = Protected(10)
class Child(MyClass):
def access_protected(self):
print(self.my_protected)
- Behavior:
- Reading or writing from unrelated classes raises
PermissionError. - Subclasses can access and modify the value.
- Reading or writing from unrelated classes raises
3. Internal
- Purpose: Restrict access to code within the same folder/module.
- Example:
class MyClass:
my_internal = Internal(99)
- Behavior:
- Access from files outside the same folder raises
PermissionError. - Useful for module-level encapsulation.
- Access from files outside the same folder raises
4. Public
- Purpose: Standard public variable, no access restriction.
- Example:
class MyClass:
my_public = Public(123)
- Behavior:
- Can be accessed and modified freely from anywhere.
Function Decorators
1. @private
- Purpose: Restrict method access to the defining class only.
- Example:
class MyClass:
@private
def secret_method(self):
print("Private Method")
- Behavior:
- Calling from outside the class raises
PermissionError.
- Calling from outside the class raises
2. @protected
- Purpose: Allow method access from the defining class and subclasses.
- Example:
class MyClass:
@protected
def prot_method(self):
print("Protected Method")
- Behavior:
- Calling from unrelated classes raises
PermissionError.
- Calling from unrelated classes raises
3. @internal
- Purpose: Restrict method access to the same folder/module.
- Example:
class MyClass:
@internal
def internal_method(self):
print("Internal Method")
- Behavior:
- Calling from files in different folders raises
PermissionError.
- Calling from files in different folders raises
4. @public
- Purpose: Standard public method, no restriction.
- Example:
class MyClass:
@public
def pub_method(self):
print("Public Method")
- Behavior:
- Can be called from anywhere.
5. @privateinit
- Purpose: Initialize private variables separately from
__init__(); runs automatically on instance creation. - Example:
class Myclass:
privateVariable = Private(1)
def __init__(self):
Myclass.privateVariable = 2
# Error : will raise PermissionError if a subclass calls super().__init__()
@privateinit
def init(self):
Myclass.privateVariable = 2
# Right usage
self.privateVariable2 = Private(2)
Class Decorators
1. @private
- Purpose: Restrict access to the defining class only; prevents subclass or external code from instantiating or accessing the class directly.
- Example:
@private
class MyClass:
@staticmethod
def private_class():
print("private class")
- Behavior:
- Calling from outside the class raises
PermissionError.
- Calling from outside the class raises
2. @protected
- Purpose: Allow access to the defining class and its subclasses; prevents external code from instantiating or accessing the class directly.
- Example:
@protected
class MyClass:
@staticmethod
def protected_class():
print("protected class")
- Behavior:
- Calling from unrelated classes raises
PermissionError.
- Calling from unrelated classes raises
3. @internal
- Purpose: Restrict access to the defining class within the same folder/module; prevents external code from instantiating or accessing the class from other folders/modules.
- Example:
@internal
class MyClass:
@staticmethod
def internal_class():
print("internal class")
- Behavior:
- Calling from files in different folders raises
PermissionError.
- Calling from files in different folders raises
4. @public
- Purpose: Standard public class; allows unrestricted instantiation and access from any scope.
- Example:
@public
class MyClass:
@staticmethod
def public_class():
print("public class")
- Behavior:
- Can be called from anywhere.
Example Usage
class MyClass:
my_private = Private(42)
my_protected = Protected(10)
my_internal = Internal(99)
my_public = Public(123)
@private
def secret_method(self):
print(self.my_private)
@protected
def prot_method(self):
print(self.my_protected)
@internal
def internal_method(self):
print(self.my_internal)
@public
def pub_method(self):
print(self.my_public)
class Child(MyClass):
def access_protected(self):
print(self.my_protected)
self.prot_method()
@private
class PrivateClass :
def __init__(self):
print("This is a private class!")
@internal
class InternalClass :
def __init__(self):
print("This is a internal class!")
@protected
class ProtectedClass :
def __init__(self):
print("This is a protected class!")
@public
class PublicClass :
def __init__(self):
print("This is a public class!")
Notes:
- Python does not natively support strict access control.
- This library leverages descriptors for variables and decorators for methods.
- Use with caution, as it relies on call stack inspection (
inspect) and may not cover all edge cases. - Any class, method, or variable not explicitly marked with an access modifier is considered public by default.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyaccessmodifier-0.3.6.tar.gz.
File metadata
- Download URL: pyaccessmodifier-0.3.6.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47ee74ec3850a5e44c9fec8e2444628269ae861e02af78ed171fb1d984c541e4
|
|
| MD5 |
d05a9c6e3fe3de116c2b0323dc9bd74d
|
|
| BLAKE2b-256 |
f5e276316668cd70e7bf6c45720587d355bf2eb34294825f0e7c86ba56b866fc
|
File details
Details for the file pyaccessmodifier-0.3.6-py3-none-any.whl.
File metadata
- Download URL: pyaccessmodifier-0.3.6-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26c8d24f85ecc2217d5d4283db318e75ed3f3df0125255f6c4d8a821851ff8d9
|
|
| MD5 |
adc79afb3536f5f8fa88757b341bde65
|
|
| BLAKE2b-256 |
6cf79f10eb68f9a85e47146514c7813d81d762b8ca48dd25d065f15f73aad5f8
|