On Wed, Nov 07, 2018 at 02:48:40PM +0000, Albert-Jan Roskam wrote: > What is the best way to dynamically set class variables? I am looking > for a generalization of something like this: > > class Parent: pass > class Child(Parent): > col1 = 'str' > col2 = 'int'
The obvious solution is to do exactly that: just set the class attribute in the subclass. If the value is dynamically generated, so be it: class Child(Parent): col1 = calculate_some_value() col2 = col1 + calculate_something_else() If the names of the class attributes themselves have to be generated, that's what locals() is for: class Child(Parent): for i in range(10): name = "column" + str(i) locals()[name] = i del i will give you class attributes column0 = 0, column1 = 1, etc. Of course you can generate the names any way you like, e.g. read them from a text file. A cleaner solution might be to move the code into a function and pass the class namespace to it: def make_attrs(ns): for i in range(10): name = "column" + str(i) ns[name] = i class Child(Parent): make_attrs(locals()) assert column0 == 0 assert Child.column1 == 1 Does this help? -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor