Python 2.2.2 (#2, Nov 24 2002, 11:41:06)
[GCC 3.2 20020903 (Red Hat Linux 8.0 3.2-7)] on linux2
Type "help", "copyright", "credits" or "license" for more information. class pair(tuple):
.... def __init__(self,a,b):
.... tuple.__init__(self, (a,b) )
.... a=pair(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: tuple() takes at most 1 argument (2 given)
What gives? (yes it works with a list, but i need immutable/hashable)
Simon Burton. 8 2142
On Mon, 18 Aug 2003 08:24:21 +0000, Duncan Booth wrote: Simon Burton <si****@webone.com.au> wrote in news:pa****************************@webone.com.au:
> class pair(tuple): ... def __init__(self,a,b): ... tuple.__init__(self, (a,b) ) ...> a=pair(1,2) Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: tuple() takes at most 1 argument (2 given)>
What gives? (yes it works with a list, but i need immutable/hashable)
You need to override __new__ instead of __init__:
:) I need to grow a brain. thanks Duncan.
Simon.
Simon Burton: class pair(tuple): ... def __init__(self,a,b): ... tuple.__init__(self, (a,b) )
What gives? (yes it works with a list, but i need immutable/hashable)
The problem is the immutability. This one one of the
new changes in 2.3 I still don't fully understand, but I do
know the solution is __new__ class pair(tuple):
.... def __new__(self, a, b):
.... return tuple((a, b))
.... pair(2,3)
(2, 3) x=_ type(x)
<type 'tuple'>
That should give you some pointers for additional searches.
Andrew da***@dalkescientific.com
In article <pa****************************@webone.com.au>,
Simon Burton <si****@webone.com.au> wrote: Python 2.2.2 (#2, Nov 24 2002, 11:41:06) [GCC 3.2 20020903 (Red Hat Linux 8.0 3.2-7)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
class pair(tuple):... def __init__(self,a,b): ... tuple.__init__(self, (a,b) ) ... a=pair(1,2)Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: tuple() takes at most 1 argument (2 given)
What gives? (yes it works with a list, but i need immutable/hashable)
You need to define __new__(); __init__() gets called *after* object
creation, when it's already immutable.
--
Aahz (aa**@pythoncraft.com) <*> http://www.pythoncraft.com/
This is Python. We don't care much about theory, except where it intersects
with useful practice. --Aahz
In article <bh**********@slb3.atl.mindspring.net>,
Andrew Dalke <ad****@mindspring.com> wrote: The problem is the immutability. This one one of the new changes in 2.3 I still don't fully understand, but I do know the solution is __new__
class pair(tuple):... def __new__(self, a, b): ... return tuple((a, b)) ... pair(2,3)(2, 3) x=_ type(x)<type 'tuple'>
That should give you some pointers for additional searches.
This works better:
class pair(tuple):
def __new__(cls, *args):
return tuple.__new__(cls, args)
--
Aahz (aa**@pythoncraft.com) <*> http://www.pythoncraft.com/
This is Python. We don't care much about theory, except where it intersects
with useful practice. --Aahz
Aahz: class pair(tuple): def __new__(cls, *args): return tuple.__new__(cls, args)
Right. cls instead of self because it isn't passed the instance.
It would help me learn this new part of Python if I had
any use for it. :)
Though *args likely isn't what the OP wanted - I assume
that 'pair' takes only two elements.
Andrew da***@dalkescientific.com
"Andrew Dalke" <ad****@mindspring.com> wrote in message news:<bh**********@slb3.atl.mindspring.net>... Simon Burton:>> class pair(tuple): ... def __init__(self,a,b): ... tuple.__init__(self, (a,b) )
What gives? (yes it works with a list, but i need immutable/hashable)
The problem is the immutability. This one one of the new changes in 2.3
<nitpick mode> Actually this was a change in 2.2 </nitpick mode>
__new__ is needed to acts on the creation of immutable objects and this
is the right way to use it; unfortunaly it gives room to plenty of abuses:
class YouThinkIamAString(str):
def __new__(cls,arg):
return 42
print YouThinkIamAString("What's the answer?")
Yes, in Python you cannot modify the builtins, but still you have plenty
of rope to shoot in your foot ;)
Michele
On 18 Aug 2003 10:27:47 -0400, aa**@pythoncraft.com (Aahz) wrote: In article <bh**********@slb3.atl.mindspring.net>, Andrew Dalke <ad****@mindspring.com> wrote: The problem is the immutability. This one one of the new changes in 2.3 I still don't fully understand, but I do know the solution is __new__
> class pair(tuple): ... def __new__(self, a, b): ... return tuple((a, b)) ...> > pair(2,3) (2, 3)> x=_ > type(x) <type 'tuple'>>
That should give you some pointers for additional searches.
This works better:
class pair(tuple): def __new__(cls, *args): return tuple.__new__(cls, args)
so far, just
class pair(tuple): pass
should do it, no? Unless you want to take the name as suggesting that
length 2 should be enforced. Don't know what other methods are planned,
but ISTM you get the vanilla __new__ for free. Or am I missing something?
Regards,
Bengt Richter
In article <bh**********@216.39.172.122>, Bengt Richter <bo**@oz.net> wrote: so far, just
class pair(tuple): pass
should do it, no? Unless you want to take the name as suggesting that length 2 should be enforced. Don't know what other methods are planned, but ISTM you get the vanilla __new__ for free. Or am I missing something?
Certainly; I'm just illustrating the principle if you wanted to do
something useful. ;-)
--
Aahz (aa**@pythoncraft.com) <*> http://www.pythoncraft.com/
This is Python. We don't care much about theory, except where it intersects
with useful practice. --Aahz This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Michele Simionato |
last post by:
Let me show first how does it work for tuples:
>>> class MyTuple(tuple):
.... def __new__(cls,strng): # implicit conversion string of ints =>...
|
by: Christoph Groth |
last post by:
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
...
|
by: Will McGugan |
last post by:
Hi,
Why is that a tuple doesnt have the methods 'count' and 'index'? It
seems they could be present on a immutable object.
I realise its easy...
|
by: Dave Opstad |
last post by:
I'm hoping someone can point out where I'm going wrong here. Here's a
snippet of a Python interactive session (2.3, if it makes a difference):
...
|
by: James Stroud |
last post by:
Hello All,
Is this a bug? Why is this tuple getting unpacked by raise? Am I missing some
subtle logic? Why does print not work the same way as...
|
by: groups.20.thebriguy |
last post by:
I've noticed that there's a few functions that return what appears to
be a tuple, but that also has attributes for each item in the tuple.
For...
|
by: Alan Isaac |
last post by:
I am probably confused about immutable types.
But for now my questions boil down to these two:
- what does ``tuple.__init__`` do?
- what is the...
|
by: abcd |
last post by:
I wanted to extend tuple but ran into a problem. Here is what I
thought would work
class MyTuple(tuple):
def __init__(self, *args):...
|
by: Pradnyesh Sawant |
last post by:
Hello,
I have a pyqt4 code in which i'm trying the signal/slot mechanism. The
(stripped) code is as follows:
class D(QtCore.QThread):
def...
|
by: Kemmylinns12 |
last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
|
by: Naresh1 |
last post by:
What is WebLogic Admin Training?
WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
|
by: antdb |
last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine
In the overall architecture, a new "hyper-convergence" concept was...
|
by: Matthew3360 |
last post by:
Hi there. I have been struggling to find out how to use a variable as my location in my header redirect function.
Here is my code.
...
|
by: Matthew3360 |
last post by:
Hi, I have a python app that i want to be able to get variables from a php page on my webserver. My python app is on my computer. How would I make it...
|
by: Arjunsri |
last post by:
I have a Redshift database that I need to use as an import data source. I have configured the DSN connection using the server, port, database, and...
|
by: WisdomUfot |
last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific...
|
by: Matthew3360 |
last post by:
Hi,
I have been trying to connect to a local host using php curl. But I am finding it hard to do this. I am doing the curl get request from my web...
|
by: BLUEPANDA |
last post by:
At BluePanda Dev, we're passionate about building high-quality software and sharing our knowledge with the community. That's why we've created a SaaS...
| |