Skip to main content

Proper access modifiers for Python classes.

Project description

pyattr

PyPI PyPI - Downloads Lines of Code

While Python does have name mangling, it is not nearly as powerful as access modifiers found in languages such as C++. pyattr provides an easy-to-use API for access modifiers in Python.

Installation

Installation via pip:

pip install pyattr

Usage

All you have to do is make your class inherit from the pyattr.Pyattr class, and add super().__init__() as the first line in the __init__ function of your class. And that's it! pyattr will handle the magic to make sure variables cannot be accessed / set where the shouldn't be. It also provides useful error messages to users.

Example

Here is a simple examples involving a private variable.

from pyattr import Pyattr

class Example(Pyattr):
    def __init__(self) -> None:
        super().__init__()

        self.__name = "pyattr"

example = Example()
print(example.__name) # Error - '__name' is a private attribute of 'Example'.

As well as variables, pyattr also supports access control of functions!

from pyattr import Pyattr

class Example(Pyattr):
    def __init__(self) -> None:
        super().__init__()

    def __example(self) -> None:
        pass


example = Example()
print(example.__example())  # Error - '__example' is a private attribute of 'Example'.

How does it work?

pyattr overrides the default set and get functions of your class. The overridden functions defined by pyattr are merged into your class when you inherit from the pyattr.Pyattr class. As well as this, the pyattr.Pyattr class inherits from the pyattr._PyattrDict class, which provides a custom dictionary implementation. This is because you can change the variables in a class using class.__dict__["var"] = "val", meaning a custom dictionary would be the best way to prevent the access system being circumvented.

The overriden set and get functions of your class call the respective set and get functions of the custom dictionary. This dictionary, using inspect.stack(), works out the caller's function, and the caller's class (if any). It uses this data to work out if the caller should be allowed to access the specified variables. If it shouldn't, an AttributeError is raised, with an error message explaining the cause.

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

pyattr-1.3.0.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

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

pyattr-1.3.0-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

Details for the file pyattr-1.3.0.tar.gz.

File metadata

  • Download URL: pyattr-1.3.0.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for pyattr-1.3.0.tar.gz
Algorithm Hash digest
SHA256 5190f2274c91a0c2ea82e5faf01c105f0a7829fac424202b6c96a4be6e5f51f0
MD5 5233434f8864c8798c082bb9f189a222
BLAKE2b-256 0105ce39ac4390495e0970d5a9c028ba3067b9da1dfbe1ee21a36014db091611

See more details on using hashes here.

File details

Details for the file pyattr-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: pyattr-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 4.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for pyattr-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2cd4e4651e49fff029acf543e08859f70ea08061591a1d26cabd488166d95bd1
MD5 596473ba1780809e0f7f16b206c38622
BLAKE2b-256 533e10726b75a29141fa98ce5e99688fd4434019cbc0708ecf6220ea510bdc39

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