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)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f2d8b257d90d18e58e971759e424cb8c368509adc1f042f7c7601b2770beac7 |
|
MD5 | 1c08fb4f9c37b5464ceca4eb3745e48c |
|
BLAKE2b-256 | e3346ec29c214d7ee9a470f0d89274af0e8d8b9d31448802a93cf4c71e982a13 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 378209e664016a999bcba632dbaa9e09e6c6ae827d08669f795b6487d5ac58e2 |
|
MD5 | 2bf1238dba0f1b926ae60a8f6d22efc6 |
|
BLAKE2b-256 | 1751fa6ca936d11e1b13402b4eb2d0475785ac2c3dde630ca6fbc60f3596dcfd |