I have a class which is essentially used to define common constants for other classes. It looks something like the following:
class CommonNames(object):
C1 = 'c1'
C2 = 'c2'
C3 = 'c3'
And I want to get all of the constant values "pythonically". If I used CommonNames.__dict__.values()
I get those values ('c1'
, etc.) but I get other things such as:
<attribute '__dict__' of 'CommonNames' objects>,
<attribute '__weakref__' of 'CommonNames' objects>,
None ...
Which I don't want.
I want to be able to grab all the values because this code will be changed later and I want other places to know about those changes.
In Python, constants are usually declared and assigned in a module. Here, the module is a new file containing variables, functions, etc which is imported to the main file. Inside the module, constants are written in all capital letters and underscores separating the words.
The variables that are defined outside the class can be accessed by any class or any methods in the class by just writing the variable name.
In programming, the term constant refers to names representing values that don't change during a program's execution. Constants are a fundamental concept in programming, and Python developers use them in many cases.
You'll have to filter those out explicitly by filtering on names:
[value for name, value in vars(CommonNames).iteritems() if not name.startswith('_')]
This produces a list of values for any name not starting with an underscore:
>>> class CommonNames(object):
... C1 = 'c1'
... C2 = 'c2'
... C3 = 'c3'
...
>>> [value for name, value in vars(CommonNames).iteritems() if not name.startswith('_')]
['c3', 'c2', 'c1']
For enumerations like these, you'd be better of using the enum34
backport of the new enum
library added to Python 3.4:
from enum import Enum
class CommonNames(Enum):
C1 = 'c1'
C2 = 'c2'
C3 = 'c3'
values = [e.value for e in CommonNames]
If you're trying to use Martijn example in python3, you should use items() instead of iteritmes(), since it's deprecated
[value for name, value in vars(CommonNames).items() if not name.startswith('_')]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With