Python types

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Sun Mar 26 18:34:14 EST 2006


Salvatore a écrit :
> Thank's everybody :-)
> 
> 
> Here is a type définition I've found on the net which I agree with :
> 
> Attribute of a variable which determines the set of the values this
> variabe can take and the
> operations we can apply on it.

Then - as already pointed by Alex - there is no type in Python, since 
there is no variable (even if this term is often improperly used for 
bindings) !-)

Ok, let's s/variable/object/g and define some objects and operations:

def myop(obj):
   return obj.foo * 2

class Bar(object):
   pass

b = Bar()

Can we apply the myop() operation on the object name 'b' is bound to ?

myop(b)
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "<stdin>", line 1, in myop
AttributeError: 'Bar' object has no attribute 'foo'


Well... but wait a minute:
b.foo = []
myop(b)
-> []

Err... Wait another minute:

b2 = Bar()
type(b) is type(b2)
-> True
myop(b2)
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "<stdin>", line 1, in myop
AttributeError: 'Bar' object has no attribute 'foo'

Ok, so even if Python itself declares b and b2 (read: objects that names 
b and b2 are bound to) to be of the same type,  you cannot apply the 
myop() operation on b2...

Also:

del b.foo
myop(b)
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "<stdin>", line 1, in myop
AttributeError: 'Bar' object has no attribute 'foo'


So *sometimes* you can apply myop() to b, and sometimes you can't.

Now if we come back to your original post:
"""
All objects seem to have a perfectly defined
type
"""

"Perfectly defined" ? Really ? Not for your current definition of 'type' 
at least !-)

I still mostly agree with the given definition of type. But the fact is 
that in Python, the type*s* of an object are not so perfectly defined - 
they're mostly implicits, and can vary during the object's lifetime.

Note that it does'nt make Python weakly typed - you cannot perform any 
arbitrary operation on a given object, only the operations this object 
can support at a given moment. FWIW, if you want a weakly typed 
language, take a look at C.



More information about the Python-list mailing list