Have you thought about using a metaclass? You could grab all new class fields on its creation, and then use them to create either the list or the dictionary if needed.
>>>class DadMeta(type):
...    def __new__(mcs, name, bases, dct):
...        values_dict = {}
...        values_list = []
...        for name, value in dct.items():
...            if not callable(value) and not name.startswith("__"):
...                values_dict[name] = value
...                values_list.append(value)
...        
...        cls = super().__new__(mcs, name, bases, dct)   
...        cls.values_list = getattr(cls, "values_list", []) + values_list
...        cls.values_dict = {**getattr(cls, "values_dict", {}), **values_dict}
...               
...        return cls
...                
>>>class Dad(metaclass=DadMeta):
...    var_1 = "foo"
...    var_2 = "bar"
...
>>>Dad.values_list
['foo', 'bar']
>>>Dad.values_dict
{'var_1': 'foo', 'var_2': 'bar'}
>>>class Son(Dad):
...    var_3 = "test"
...    var_4 = "meh"
...
>>>Son.values_list
['foo', 'bar', 'test', 'meh']
>>>Dad.values_list
['foo', 'bar']
>>>Son.values_dict
{'var_1': 'foo', 'var_2': 'bar', 'var_3': 'test', 'var_4': 'meh'}
This should also work nicely with inheritance, if needed.