Skip to main content

Allows for deferred instantiation of class attributes.

Project description

AttriBox - Python Descriptors the Easy Way

Installation

Install AttriBox easily with pip:

pip install attribox
## Quick Start

Imagine having nested custom classes with a requirement of descriptor
protocol implementation. The AI advices you to rethink the design, before
they present you with hundreds of lines of syntactic broccoli. Meanwhile,
your friends are asking you what you are doing with your life. Well, the
AttriBox is here to help!

```python
class SomeGraphics:
  """Imagine you wish to encapsulate a graphical problem in a class. You 
  already have custom classes for the components, but now you wish you 
  had implemented them as descriptors, but of course descriptors are 
  unique to the class and not to the instance. The memories are coming. 
  With them tears begin to form. Never fear! AttriBox is here!"""

  fillColor = AttriBox[RGB](144, 255, 0)
  borderColor = AttriBox[RGB](0, 0, 0)
  centeredDiv = AttriBox[GetRect](69, 420)

The above code implements the class attributes as descriptors. The AttriBox holds on to the class for you, until one of your instances invokes __get__ at which point AttriBox creates a dedicated specimen for just your instance.

A More Ambitious Example

Suppose you are designing a graphical user interface. You wish to use the descriptor protocol to expose the I/O communication directly to the user interface. You see all of those wonderful numbers over there on the robot or whatever, and you see those tempting 'set' methods on your descriptors.

class MainApp(QMainWindow):
  """The basic application window."""

  mainMenuBar = AttriBox[MenuBar](this)  # yes, 'this' is a thing
  mainStatusBar = AttriBox[StatusBar](this)  # fr

  baseLayout = AttriBox[Grid]()
  baseWidget = AttriBox[QWidget]()
  indicator = AttriBox[Indicator]()
  button = AttriBox[Button]()
  slider = AttriBox[Slider]()

  def initUi(self) -> None:
    """Initializes the user interface."""
    self.baseLayout.addWidget(self.indicator, 0, 0)
    self.baseLayout.addWidget(self.button, 1, 0)
    self.baseLayout.addWidget(self.slider, 2, 0)
    self.baseWidget.setLayout(self.baseLayout)
    self.setCentralWidget(self.baseWidget)
    self.setMenuBar(self.mainMenuBar)
    self.setStatusBar(self.mainStatusBar)

  def connectSignals(self) -> None:
    """Connects the signals to the slots."""
    self.button.clicked.connect(self.indicator.toggle)
    self.slider.valueChanged.connect(self.indicator.setValue)
    self.slider.valueChanged.connect(self.mainStatusBar.setValue)

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

attribox-0.1.5.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

attribox-0.1.5-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file attribox-0.1.5.tar.gz.

File metadata

  • Download URL: attribox-0.1.5.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for attribox-0.1.5.tar.gz
Algorithm Hash digest
SHA256 9478b54eda59f164b0e6c277ecb6c91b35f096b19c72f73f08dea58c4751eb5d
MD5 7c0a2bf1543942d7d9e3ecfa31fed9d8
BLAKE2b-256 4181428e049ce11f91c953aa2a59936119b3044d459355347b049f7289781ffd

See more details on using hashes here.

File details

Details for the file attribox-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: attribox-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for attribox-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 59199af2af4ba23abc0e059547b38ce6a0a1d6e0f1871ee60ab1ff138d7a8452
MD5 bda5e62a7be9606c7703e350520bcc81
BLAKE2b-256 8c6d346e7189f75bb4b8727aebf21b7e2c18701fe22d1ddbaf3b37b55635d2c8

See more details on using hashes here.

Supported by

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