Mug a écrit :
hi ,i had a problem on constructor overwrite:
i have something like:
class obj:
def __init__(self, x=100, y=None):
if y is None:
self.x=x
else:
self.y=y
With such an initializer, you'll have instances with an attribute 'y'
and no attribute 'x', and instances with an attribute 'x' and no
attribute 'y' :
>>> class Obj(object):
... def __init__(self, x=100, y=None):
... if y is None: self.x = x
... else: self.y = y
...
>>> objx = Obj()
>>> objx.x
100
>>> objx.y
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Obj' object has no attribute 'y'
>>> objy = Obj(y='foo')
>>> objy.x
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Obj' object has no attribute 'x'
>>> objy.y
'foo'
>>>
Are you *sure* this is what you want ?
so i can call :
objet = obj() # x=100 y=None
or
objet = obj(40) # x= 40 y=None
but if i do :
objet = obj('not cool') #x='not cool' y=None
What else would you expect ???
since x is not typed .
'x' is a name, and names are indeed "untyped". Now the object bound to
name 'x' is actually typed.
i am waiting for a result:
objet = obj('not cool') #x=100 y='not cool'
as they do in C++ or java.
Python is neither C++ nor Java (nor Pascal nor Lisp nor
<yourfavoritelanguagehere> FWIW), so trying to forcefit C++/Java idioms
will at best lead you to pain and frustation. Just like trying to
forcefit Python idioms in C++ or Java (or Pascal or Lisp etc....).
is there a way to do it?
objet = obj(y='not cool')
Now if you could explain the problem you're trying to solve instead of
the solution you thought would solve it, we might eventually provide
more help.
--
http://mail.python.org/mailman/listinfo/python-list