RoadieRich is correct, though you should be careful using getattr/setattr too much when you can avoid it. (For instance, if your user could get control of var_list, they could get access to any attributes they wanted.)
If you just want to access the values of these attributes:
var_list = [self.account, self.user, self.authenticator,
self.database, self.schema, self.warehouse, self.role]
For a simple look at why this happens: Intuitively, python has a mapping of variable names to values. (many mappings, in reality, but let's ignore that for simplicity. You can read this post for a bit more info). That mapping might look like:
account =>> 1234
user =>> User class @ 0x0340 [A reference to a User class at some random place in memory]
...
When you run var_list = [account, user]
, it does something like
account =>> 1234
user =>> User class @ 0x0340
var_list =>> List class @ 0x0350 <list_0>
list_0<element 0> =>> 1234
list_0<element 1> =>> User class @ 0x0340
...
See that the elements of the list only know their values, not what they were called.
If your mapping instead looks like:
self =>> YourClass @ 0x0340 <your_class_0>
your_class_0<account> =>> 1234
your_class_0<user> =>> User class @ 0x0350
...
Then trying to do var_list = [account, user]
will cause an error, because there isn't anything called account
in the mapping table.