Backround
When I create a python class and in the init method I just write:
self.name1 = name1
self.name2 = name2
....
for all arguments.
Question
SO, how to elegently write a __init__
for different *args
and **kwargs
?
I want write a metaclass to automatically set attributes for *args
and **kwargs
:
#the metaclass to be used
class LazyInit():
# code here
And then when I create child classes of it, child classes will auto __init__
for their own *args
and **kwargs
.
class Hospital(metaclass = LazyInit):
def __init__(self, *args,**kwargs): pass
class Basketball(metaclass = LazyInit):
def __init__(self, *args, **kwargs): pass
a = 1
b = 2
c = 3
a_hospital = Hospital(a, b, kw1 =1, kw2 =2)
a_circle = Basketball(a, c, kw3 = 10, kw4 = 20)
My attempt
I only know that we can use setattr
to do it only for **kwargs
:
class LazyInit():
def __init__(self,**kwargs):
for k,v in kwargs.items():
setattr(self,k,v)
LazyInit(a=1).a
1
However, this is not a meta class which can be used in child classes. I should write this code snippet in each of my child classes...