[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux] Re: petite info sur phyton



Hello !

On Fri, May 04, 2001 at 07:14:14PM +0200, Gerd-Christian Michalke wrote:
> Bonjour !
[clip]
> En fait ja'merais bien utiliser qd meme python pour l'une ou l'autre
> bricole surtout a cause d'une syntaxe claire. Question: esske python
> supporte-t'il le polymorphisme ? Attention: les classes, ca je sais, j'ai
> deja essaye aussi pourfaire de l'heritage. Mais le polymorphysme, le vrai
> avec des methodes virtuelles (ou abstraites, c'est selon) ?

Le langage Python utilise un 'binding' dynamique, ce qui signifie qu'il
recherche les méthodes au moment où il en a besoin. Tous les appels sont
donc virtuels (au sens C++/Java). On peut voir la nature dynamique dans
le petit exemple suivant (on appelle une méthode 'bar' de la classe 'A'
qui n'existe pas encore lors de la compilation) :

class A:
        def foo (self, bar):
                print 'Foo said: ' + bar

def main ():
        a = A ()
        a.bar = a.foo
        a.bar ('Hello, World')

main ()

Les variables (et/ou instances) n'étant pas déclarées et également
dynamiques, il n'y a pas de résolution à la compilation (Python est
compilé en bytecode avant l'exécution) :

Python :			Bytecode :

a.foo ('Hello, World')		18 LOAD_FAST           0 (a)
				21 LOAD_ATTR           2 (foo)
				24 LOAD_CONST          1 ('Hello, World')
				27 CALL_FUNCTION       1

Quant aux méthodes/fonctions surchargées, elles n'existent pas
directement en python, puisque les types sont dynamiques :

def foo (bar):
	if (type (bar) == types.StringType):
		print ('String !')
	elif (type (bar) == types.IntType):
		print ('Int !')
	else:
		print ('Inconnu !')

> Merci a l'avance
> Gerd

Cu,
Dash.

-- 
The problem with "What You See Is What You Get" is that what you see is
all you've got.
                -- Brian Kernighan
-- 
Damien Diederen
dash@linuxbe.org
http://users.swing.be/diederen/

[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php     ]
[ http://LinuxBe.org              Contact: listmaster@linuxbe.org  ]