Is there are good DRY fix for this painful design pattern?
Kirill Balunov
kirillbalunov at gmail.com
Tue Feb 27 09:55:15 EST 2018
This validation can be also done with the use of annotations, while I find
it super awful, I put this for one more example:
from functools import wraps
def validate(func):
@wraps(func)
def _wrap(self, *args, **kwargs):
variables = func.__annotations__.keys()
kwargs.update(zip(variables, args))
for var in variables - kwargs.keys():
kwargs[var] = getattr(self, var)
return func(self, **kwargs)
return _wrap
class Foo:
def __init__(self, bashful, doc, dopey, grumpy,
happy, sleepy, sneezy):
self.bashful = bashful
self.doc = doc
self.dopey = dopey
self.grumpy = grumpy
self.happy = happy
self.sleepy = sleepy
self.sneezy = sneezy
@validate
def spam(self, bashful:'Any'=None, doc:'Any'=None, dopey:'Any'=None,
grumpy:'Any'=None, happy:'Any'=None, sleepy:'Any'=None,
sneezy:'Any'=None):
return bashful, doc, dopey, grumpy, happy, sleepy, sneezy
a = Foo(1,2,3,4,5,6,7)
a.spam(grumpy='Hello')
With kind regards,
-gdg
More information about the Python-list
mailing list