__init__ method for containers

Calvin Spealman ironfroggy at socialserve.com
Wed Dec 12 10:35:56 EST 2007


I agree that the behavior should be more consistant, but you also  
should not be calling __init__ more than once on any given instance  
and that in and of itself should probably constitute undefined behavior.

On Dec 12, 2007, at 3:22 PM, Neil Cerutti wrote:

> List and deque disagree on what __init__ does. Which one is
> right?
>
> Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit  
> (Intel)] on
> win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> from collections import deque
>>>> x = deque([0, 1])
>>>> x.__init__([2, 3])
>>>> x
> deque([0, 1, 2, 3])
>>>> y = list([0, 1])
>>>> y.__init__([2, 3])
>>>> y
> [2, 3]
>
> test_deque.py even contains a test verifying its __init__
> behavior, so perhaps deque has a good reason to differ from the
> behavior of list.
>
> Moreover, both methods use the same doc string, i.e.:
>
>   __init__(...)
>     x.__init__(...) initializes x; see x.__class__.__doc__ for  
> signature
>
> When implementing a list-like container extension type, is there
> any reason to choose anything other than list-like behavior,
> i.e., if you call __init__, you'll initialize the container?
> deque's behavior doesn't make sense to me.
>
> -- 
> Neil Cerutti
> One of the causes of the American Revolution was the English put  
> tacks in
> their tea. --History Exam Blooper
> -- 
> http://mail.python.org/mailman/listinfo/python-list




More information about the Python-list mailing list