Python Forum

Full Version: how to add class instance attributes from list
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
hi everyone,
My questions is follows
lets say i have
class BaseClass:
    def __init__(self, atr_1=None, atr_2=None, atr_3=None):
        pass
I want to create class instance by passing attributes in the list.

Here is the tricky part, my list of attributes let say has less items..
a_list = ["att_1_data", "att_2_data", "att_4_data"]
1. how i can pass this list of attributes without iterating over list items
2. how can i skip the att_3_data (leave default as None as you see att_3_data is missing from list) and continue to next attr_4_data
I guess somehow i need to use keyword argument..
hope I was able to describe the problem
THANKS
I see at least two ways. The first way is to create a filtering function that prepares the arguments to be passed to the constructor. You will end up with a syntax such as
instance = BaseClass(**eggs(a_list))
The second way is to create a factory function to create instances with a syntax such as
instance = bacon(a_list)
In your case you could implement these strategies with eg
def eggs(a_list):
    return {'attr_1': a_list[0], 'attr_2': a_list[1]}

def bacon(a_list):
    return BaseClass(attr_1=a_list[0], attr_2=a_list[1])
(Jul-22-2019, 07:39 AM)Gribouillis Wrote: [ -> ]
instance = BaseClass(**eggs(a_list))
Thanks a lot for quick reply, can you elaborate how **eggs works?
also does it means that my BaseClass need to be created like BaseClass(**kwargs)?

I am sorry i cannot figure it out how the second option works..