Skip to main content

Python decorators to specify accessible scopes and enhance access control of methods.

Project description

Version SupportedVersions License

Installation

Built and tested on Python 3.12.
No requirements other than the module itself.

pip install python-access-modifiers

Introduction

python-access-modifiers is a lightweight Python package designed to enhance access control of methods within classes and modules.

Decorators

@private - Allows you to designate methods as "private", controlling the accessibility of the method based on the calling context.
@protected - Allows for the creation of "protected" methods, allowing access from within the defining class and any classes that inherit from it.

Example Usage

Creating a private method inside of a class

from python_access_modifiers import private

class MyClass():
    @private
    def my_private_method(self) -> None:
        print("This is a private method")

    def my_public_method(self) -> None:
        print("This is a public method")
        self.my_private_method()

my_class = MyClass()
my_class.my_public_method()

Output

No exception is raised because my_private_method is called from within MyClass, not from outside of the accessible scope.

This is a public method
This is a private method

Calling a private method outside of the accessible scope

from python_access_modifiers import private

class MyClass():
    @private
    def my_private_method(self) -> None:
        print("This is a private method")

    def my_public_method(self) -> None:
        print("This is a public method")
        self.my_private_method()

my_class = MyClass()
my_class.my_private_method()

Output

RuntimeError: Cannot invoke private method "MyClass.my_private_method" from within the scope of "__main__"

Creating classes that inherit private methods

from python_access_modifiers import private

class Base():
    @private
    def my_private_method(self):
        print("This is a private method")

    def my_public_method(self):
        print("This is a public method")
        self.my_private_method()

class Child(Base):
    ...

child = Child()
child.my_public_method()

Output

my_private_method is called from within the Base class, therefore no exception is raised.

This is a public method
This is a private method

However, if my_private_method was called directly from outside of the accessible scope of the Base class, a RuntimeError would be raised.

child = Child()
child.my_private_method()

Output

RuntimeError: Cannot invoke private method "Base.my_private_method" from within the scope of "__main__"

Creating a private method from inside of a module

my_module.py

from python_access_modifiers import private

@private
def my_private_method():
    print("This method is private to my_module")

main.py

from my_module import my_private_method

my_private_method()

Output

RuntimeError: Cannot invoke private method "my_module.my_private_method" from module "__main__"

Creating a protected method

from python_access_modifiers import protected

class MyBaseClass():
    @protected
    def my_protected_method(self):
        print("This method is protected inside of MyBaseClass")

    def call_protected_method(self):
        self.my_protected_method()

class MySubClass(MyBaseClass):
    def call_protected_method_from_subclass(self):
        self.my_protected_method()
        
subclass = MySubClass()

subclass.call_protected_method()
subclass.call_protected_method_from_subclass()

Output

If my_protected_method is called from within MyBaseClass or from within one of it's subclasses (i.e: MySubClass), the method gets called normally.

This method is protected inside of MyBaseClass
This method is protected inside of MyBaseClass

However, if my_protected_method is called from outside of the accessible scope of the base class and it's subclasses, an exception will be raised.

subclass.my_protected_method()

Output

RuntimeError: Cannot invoke protected method "MyBaseClass.my_protected_method" from within the scope of "__main__"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_access_modifiers-1.2.1.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_access_modifiers-1.2.1-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

Details for the file python_access_modifiers-1.2.1.tar.gz.

File metadata

  • Download URL: python_access_modifiers-1.2.1.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for python_access_modifiers-1.2.1.tar.gz
Algorithm Hash digest
SHA256 ed2d4bc0c7d9796499b7feeaa2cce5218a4653a7572d2a5c6673e667c10c80e9
MD5 83fb09063b500644f8b656be471d7599
BLAKE2b-256 b7e5873f6938d0d739de7c5dd154772614031d293c66ab1fd80d0685624dfbb4

See more details on using hashes here.

File details

Details for the file python_access_modifiers-1.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for python_access_modifiers-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7ed074286ffd8ba3242f0b9c8036e86e799b43096ac869b2f082d87a549e2797
MD5 b648a46e94c2030769abd52c95c493d9
BLAKE2b-256 e1a7bb58b4290fbf8036b28e6d76c8b8b15bb8cb71e10b6a753ceb5587e42650

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page