Favorite non-python language trick?

Tom Anderson twic at urchin.earth.li
Sat Jun 25 15:01:38 EDT 2005


On Fri, 24 Jun 2005, Roy Smith wrote:

> Tom Anderson  <twic at urchin.earth.li> wrote:
>
>> The one thing i really do miss is method overloading by parameter type. 
>> I used this all the time in java
>
> You do things like that in type-bondage languages

I love that expression. I think it started out as 'bondage and discipline 
languages', which is even better. I'm going to start referring to python 
as a 'sluttily typed' language.

> like Java and C++ because you have to.  Can you give an example of where 
> you miss it in Python?

No. I don't generally go around keeping a list of places where i miss 
particular features or find particular warts irritating. Still, my 
medium-term memory is not completely shot, so i assume i haven't missed it 
much in the last couple of days!

> If you want to do something different based on the type of an argument, 
> it's easy enough to do:
>
> def foo (bar):
>    if type(bar) == whatever:
>       do stuff
>    else:
> 	do other stuff
>
> replace type() with isistance() if you prefer.

Yeah, i'm well aware that this is possible - what it's not is a clean 
solution. If i was into writing boilerplate, i'd be using C. Also, this 
gets really nasty if you want to overload on multiple variables.

Also, it actually falls down really badly in combination with duck typing 
- you can't use isinstance to ask if an object looks like a file, for 
example, only if it really is a file. Sure, you can do a bunch of hasattrs 
to see if it's got the methods it should have, but that doesn't tell you 
for certain it's a file, and it's a pain in the arse to write. In a typed 
language, you'd just ask if it implemented the Channel (for example) 
interface.

>> No, it's not really possible in a typeless language,
>
> Python is not typeless.  It's just that the types are bound to the 
> objects, not to the containers that hold the objects.

No. Types are properties of variables; the property that objects have is 
called class. Python has classes but not types. I realise that many, even 
most, people, especially those using typeless languages like python or 
smalltalk, use the two terms interchangeably, but there's a real and 
meaningful distinction between them. I may be the last person alive who 
thinks it's an important distinction, but by god i will die thinking it. 
So let's recognise that we have slightly different terminologies and not 
argue about it!

tom

-- 
Why do we do it? - Exactly!



More information about the Python-list mailing list