A change to a class attribute does not propagate - bug or feature?
Brian McErlean
b_mcerlean at yahoo.com
Thu Jan 10 06:19:32 EST 2002
vesselin at beonic.com (Vesselin) wrote in message news:<84b16e14.0201092325.242c10df at posting.google.com>...
> """ Please run this code. It seems that in the line:
> def __init__(self, Name = "newClass" + str(baseClass.ClassId)):
> Python takes the value of baseClass.ClassId from somewhere else
> I use ActivePython build 2.1.212
> """
> class newClass(baseClass):
> def __init__(self, Name = "newClass" + str(baseClass.ClassId)):
This line is the problem. The code in the arguments is evaluated
at the time the function is created - so this is evaluated at the
start of your program, becoming:
def __init__(self, Name = "newClass1"):
To fix this, put the code in the body of your function - ie.
class newClass(baseClass):
def __init__(self, Name = None):
if Name == None:
Name = "newClass" + str(baseClass.ClassId)
baseClass.__init__(self, Name)
In some cases, you may want to allow None to be passed in as a value, in which
case, use some other value to distinguish "no default passed", eg.
class _NoDefault: pass
class newClass(baseClass):
def __init__(self, Name = _NoDefault):
if Name == _NoDefault:
Name = "newClass" + str(baseClass.ClassId)
baseClass.__init__(self, Name)
Hope this helps,
Brian.
More information about the Python-list
mailing list