Skip to main content

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

Release files for dynamicmethod 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dynamicmethod 1.1.0
File Size Uploaded
dynamicmethod-1.1.0.tar.gz 4.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dynamicmethod 1.1.0
File Interpreter ABI Platform
dynamicmethod-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 14.5 kB

Release files / dynamicmethod-1.1.0.tar.gz

Download URL dynamicmethod-1.1.0.tar.gz
Size 4.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4f2d8b257d90d18e58e971759e424cb8c368509adc1f042f7c7601b2770beac7
BLAKE2b-256 checksum
How to use checksums
e3346ec29c214d7ee9a470f0d89274af0e8d8b9d31448802a93cf4c71e982a13
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / dynamicmethod-1.1.0-py3-none-any.whl

Download URL dynamicmethod-1.1.0-py3-none-any.whl
Size 10.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
378209e664016a999bcba632dbaa9e09e6c6ae827d08669f795b6487d5ac58e2
BLAKE2b-256 checksum
How to use checksums
1751fa6ca936d11e1b13402b4eb2d0475785ac2c3dde630ca6fbc60f3596dcfd
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

1 release file

1.0.1

1 release file

1.0

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page