python class variable not visible in __init__?
python
Solution
It's `Foo` that isn't visible, because you're in the middle of building it. But since you're in the same scope as `custom`, you can just say `custom` rather than `Foo.custom`:
class Foo(object):
custom = 1
def __init__(self, mycustom=custom):
self._custom = mycustom
But note that changing `Foo.custom` later on won't affect the value of `custom` that subsequently-created `Foo`s see:
class Foo(object):
custom = 1
def __init__(self, mycustom=custom):
self._custom = mycustom
one = Foo()
Foo.custom = 2
two = Foo()
print (two._custom) # Prints 1
By using a sentinel default value instead, you can get what you want:
class Foo(object):
custom = 1
def __init__(self, mycustom=None):
if mycustom is None:
self._custom = Foo.custom
else:
self._custom = mycustom
one = Foo()
Foo.custom = 2
two = Foo()
print (two._custom) # Prints 2
Problem
This code produces an error message, which I found surprising: ``` class Foo(object): custom = 1 def __init__(self, custom=Foo.custom): self._custom = custom x = Foo() ``` Can anyone provide enlightenment?