Skip to main content

Transforms a string representation of a Python literal into the corresponding Python object.

Project description

Swizzle Decorator

The Swizzle Decorator for Python enhances attribute lookup methods (__getattr__ or __getattribute__) to facilitate dynamic and flexible retrieval of multiple attributes based on specified arrangements of their names. This concept is reminiscent of swizzling in computer graphics, where it allows efficient access to components of vectors or coordinates in various orders:

import swizzle

@swizzle
class Vector:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

print(Vector(1, 2, 3).yzx)  # Output: (2, 3, 1)

Installation

pip install git+https://github.com/janthmueller/swizzle.git

Further Examples

Using swizzle with dataclass

import swizzle
from dataclasses import dataclass

@swizzle
@dataclass
class XYZ:
    x: int
    y: int
    z: int

# Test the swizzle
xyz = XYZ(1, 2, 3)
print(xyz.yzx)  # Output: (2, 3, 1)

Using swizzle with IntEnum

import swizzle
from enum import IntEnum

@swizzle(meta=True)
class XYZ(IntEnum):
    X = 1
    Y = 2
    Z = 3

# Test the swizzle
print(XYZ.yxz)  # Output: (2, 3, 1)

Setting the meta argument to True in the swizzle decorator extends the getattr behavior of the metaclass, enabling attribute swizzling directly on the class itself.

Using swizzle with NamedTuple

import swizzle
from typing import NamedTuple

@swizzle
class XYZ(NamedTuple):
    x: int
    y: int
    z: int

# Test the swizzle
xyz = XYZ(1, 2, 3)
print(xyz.yzx)  # Output: (2, 3, 1)

Sequential matching

Attributes are matched from left to right, starting with the longest substring match.

import swizzle

@swizzle(meta=True)
class Test:
    x = 1
    y = 2
    z = 3
    xy = 4
    yz = 5
    xz = 6
    xyz = 7

# Test the swizzle
print(Test.xz)  # Output: (6,)
print(Test.yz)  # Output: (5,)
print(Test.xyyz)  # Output: (4, 5)
print(Test.xyzx)  # Output: (7, 1)

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

swizzle-0.1.0.tar.gz (3.1 kB view details)

Uploaded Source

Built Distribution

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

swizzle-0.1.0-py3-none-any.whl (3.0 kB view details)

Uploaded Python 3

File details

Details for the file swizzle-0.1.0.tar.gz.

File metadata

  • Download URL: swizzle-0.1.0.tar.gz
  • Upload date:
  • Size: 3.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.5

File hashes

Hashes for swizzle-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4f7ce4d57cd352a8cc101af1f8edb8b8ad19e7acb6ec6defe278a7293e135b1d
MD5 f1d78e6310fc4d5f64da6fef81d0f9fd
BLAKE2b-256 fe69de5d439d31a41b225a6739463a453420c2efebdb6a9a87f05ce89ed52293

See more details on using hashes here.

File details

Details for the file swizzle-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: swizzle-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 3.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.5

File hashes

Hashes for swizzle-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e760e4f9f7e3efee879b5f729001918b50318c31ea9f35f366e72aeea4c92071
MD5 07effcc5e7db6d0b6759cbbbf7679897
BLAKE2b-256 c970e22a622c1ccc3240f77512e900a79b96b93309219c73e65e34d5eba24a59

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