Skip to main content

An instance method decorator that also works as a classmethod.

Project description

This simple module creates a class method that will also work as an instance method.

import dynamicmethod

class Example(object):

    x = 1  # Default classmethod value

    def __init__(self, x=0):
        self.x = x

    @dynamicmethod
    def get_x(self):
        return self.x

print(Example.get_x())
ex = Example()
print(ex.get_x())
ex.x = 5
print(ex.get_x())

I have grown to use this module quite a bit. Mostly I make a default class level dictionary where each instance can be customized.

from dynamicmethod import dynamicmethod

class Lookup(object):

    lookup_type = {'type1': 1, 'mytype2': 2}

    def __init__(self):
        # Save an instance variable so the class variable does not change.
        self.lookup_type = self.__class__.lookup_type.copy()

    @dynamicmethod
    def add_type(self, name, value):
        self.lookup_type[name] = value

    @dynamicmethod
    def get_type(self, name):
        return self.lookup_type.get(name, None)

Lookup.add_type('New Type', 3)
assert 'New Type' in Lookup.lookup_type
print(Lookup.get_type('New Type'))

specific_lookup = Lookup()
assert 'New Type' in specific_lookup.lookup_type
print(specific_lookup.get_type('New Type'))

specific_lookup.add_type('hello', 'world!')
assert 'hello' in specific_lookup.lookup_type
assert 'hello' not in Lookup.lookup_type
print(specific_lookup.get_type('hello'))
# print(Lookup.get_type('hello'))  # This would be None since the class lookup does not contain 'hello'

# Check adding to general after an instance is created
Lookup.add_type('Fresh Type', 4)
assert 'Fresh Type' in Lookup.lookup_type
assert 'Fresh Type' not in specific_lookup.lookup_type

new_lookup = Lookup()
assert 'Fresh Type' in new_lookup.lookup_type

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

dynamicmethod-1.1.0.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

dynamicmethod-1.1.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file dynamicmethod-1.1.0.tar.gz.

File metadata

  • Download URL: dynamicmethod-1.1.0.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.1

File hashes

Hashes for dynamicmethod-1.1.0.tar.gz
Algorithm Hash digest
SHA256 4f2d8b257d90d18e58e971759e424cb8c368509adc1f042f7c7601b2770beac7
MD5 1c08fb4f9c37b5464ceca4eb3745e48c
BLAKE2b-256 e3346ec29c214d7ee9a470f0d89274af0e8d8b9d31448802a93cf4c71e982a13

See more details on using hashes here.

File details

Details for the file dynamicmethod-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: dynamicmethod-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.1

File hashes

Hashes for dynamicmethod-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 378209e664016a999bcba632dbaa9e09e6c6ae827d08669f795b6487d5ac58e2
MD5 2bf1238dba0f1b926ae60a8f6d22efc6
BLAKE2b-256 1751fa6ca936d11e1b13402b4eb2d0475785ac2c3dde630ca6fbc60f3596dcfd

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