Skip to main content

No project description provided

Project description

Implements the impl pattern*

/* inspired by Rust

Useful when it is needed to extend a class (usually 3d party) with some methods

Install

pip install impl_pattern

or

poetry add impl_pattern

Usage

Regular methods

from impl_pattern import impl

class Sample:
    def __init__(self):
        self.value = 10

@impl(Sample)
def plus_one(self: Sample):
    self.value += 1

s = Sample()
s.plus_one()

print(s.value) 
# 11

it works with async methods as well

from asyncio import sleep

@impl(Sample)
async def plus_one(self: Sample):
    await sleep(1)
    self.value += 1

s = Sample()
await s.plus_one()

print(s.value) 
# 11

Class methods

To register function as a classmethod you can use impl_classmethod decorator

from impl_pattern import impl_classmethod

class Sample:
    value = 10

@impl_classmethod(Sample)
def plus_one(cls):
    cls.value += 1

Sample.plus_one()

print(Sample.value) 
# 11

This works with async methods too

from asyncio import sleep

@impl_classmethod(Sample)
async def plus_one(cls):
    await sleep(1)
    self.value += 1

await Sample.plus_one()

print(Sample.value) 
# 11

Static methods

Static methods use the same syntax but with the impl_staticmethod decorator

from impl_pattern import impl_staticmethod

class Sample:
    ...

@impl_staticmethod(Sample)
def get_one():
    return 1

print(Sample.get_one()) 
# 1

This works with async methods too

from asyncio import sleep

@impl_staticmethod(Sample)
async def get_one():
    return 1

print(await Sample.get_one()) 
# 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

impl_pattern-0.1.1.tar.gz (6.5 kB view hashes)

Uploaded Source

Built Distribution

impl_pattern-0.1.1-py3-none-any.whl (10.6 kB view hashes)

Uploaded Python 3

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