Phoenix Phoenix - 2 months ago 3
Python Question

What's the best way to check if class instance variable is set in Python?

I have a variable which may or may not get a value in the instance:

class EC():
__init__(self, a=False):
if a: self.__var = ...

Later I want to check if the __var exists in the instance. Because prepending __ to the name changes the internal name to _EC__var the checking code becomes a little bit messy:

if ''.join(['_',self.__class__.__name__,'__name']) in self.__dict__: ...

Is code above considered normal or not? If not what are the preferred alternatives?

One option I can think of is to give __var some value anyway, for example:

_no_value = object()
def __init__(self, a):
self.__var = _no_value
if a: self.__var = ...

So later I can compare __var to _no_value instead of a mess with internal variables.


You've forgotten the EAFP principle:

    value = self.__var
except AttributeError:
    # do something else

If you're determined to use a sentinel, you can combine it with a class variable:

class EC():
    __var = object():
    if self.__var is not EC.__var: