• Aucun résultat trouvé

Python M´ethodes sp´eciales (suite)

N/A
N/A
Protected

Academic year: 2022

Partager "Python M´ethodes sp´eciales (suite)"

Copied!
9
0
0

Texte intégral

(1)

Python

M´ ethodes sp´ eciales (suite)

Nicolas Delestre

(2)

Identit´ e et ´ egalit´ e

Rappels

Les variables Python r´ef´erencent des objets : on obtient la r´ef´erence d’un objet grˆace `a la fonction standardid Deux variables peuvent r´ef´erencer le mˆeme objet (utilisation de l’affectation) : on compare les r´ef´erences des objets grˆace `a l’op´erateuris

Deux objets peuvent ˆetre ´egaux : les attributs les caract´erisant sont ´egaux

L’op´erateur == permet de tester l’´egalit´e. Par d´efaut pour Python, cette ´egalit´e repose sur l’identit´e Pour les types de base, ce comportement a ´et´e red´efini

Illustration

>>> class A:

pass

>>> a1=A()

>>> a2=A()

>>> a3=a1

>>> a1 isa2 False

>>> a1 isa3 True

>>> a1==a2 False

>>> a1==a3 True

>>> x=1.0

>>> y=1.0

>>> xis y False

>>> x==y True

Attention aux int

>>> a=256

>>> b=256

>>> ais b True

>>> a=257

>>> b=257

>>> ais b False

(3)

Les m´ ethodes sp´ eciales eq et ne 1 / 2

La m´ethode eq

C’est la m´ethode qui est ex´ecut´ee lorsque l’op´erateur== est utilis´e Ainsi l’interpr´etationa == binvoquea. eq (b)

Code de eq (self, autre) (bonne pratique) :

Tester si le param`etre est un instance de la classe de self:

isinstance(autre, LaClasseDeSelf)ouisinstance(autre, self. class ) Tester les ´egalit´es des attributs qui d´efinissent l’´egalit´e

RenvoyerNotImplementedsi l’op´erateur d’´egalit´e n’a pas `a ˆetre utilis´e

La m´ethode ne

C’est la m´ethode qui est ex´ecut´ee lorsque l’op´erateur!= est utilis´e

Par d´efaut ne renvoie la n´egation de l’appel `a eq (sauf si le r´esultat est NotImplemented)

(4)

Les m´ ethodes sp´ eciales eq et ne 2 / 2

Point2D

def __eq__(self, autre):

if not isinstance(autre, self.__class__):

return False else:

return self.x == autre.x and self.y == autre.y

Point3D

def __eq__(self, autre):

if not isinstance(autre, self.__class__):

return False else:

return super().__eq__(autre) and self.z == autre.z

(5)

Les m´ ethodes sp´ eciales de comparaison d’ordre

ge , gt , . . .

Les m´ethodes sp´eciales sont : ge pour l’op´erateur gt pour l’op´erateur>

le pour l’op´erateur lt pour l’op´erateur<

Le fait de d´evelopper lt (inversement gt ) n’oblige pas `a d´evelopper gt (inversement lt )

Attention

Il n’y a pas de lien entre le ou ge et lt , gt et eq : par exemple le fait de coder uniquement lt et eq ne permet d’utiliser l’op´erateur<=

Il n’y a pas de lien entre le et ge

Le d´ecorateurtotal orderingdu module standardfuntoolspermet de lever ces limites

(6)

La m´ ethode sp´ eciale hash 1 / 2

Rappels

L’empreinte (hash) d’un objet est un nombre (inf´erieur `a une certaine borne) qui le caract´erise :

Deux objets ´egaux doivent avoir la mˆeme empreinte

Deux objets diff´erents devraient avoir deux empreintes diff´erentes (mais il peut y avoir des collisions)

La m´ethode hash

En Python on obtient l’empreinte d’un objet en appelant la fonction standard hashqui appelle la m´ethode sp´eciale hash

Si la m´ethode hash n’est pas d´efinie, la fonction hashl`eve une exceptionTypeError Si la m´ethode hash est d´efinie, on dit que les objets de cette classe sont hashable Pour qu’un objet puisse ˆetre utilis´e comme cl´e d’undict, ou ajout´e `a un set ou `a un frozenset, il faut qu’il soit hashable

(7)

La m´ ethode sp´ eciale hash 2 / 2

Bonnes pratiques

Dans le cas ou l’on veut que les objets soient hashables :

on d´efinit hash en combinant les empreintes des attributs immuables de l’objet (par exemple en calculant lehashdes additions des hashdes attributs immuables)

la m´ethode eq doit ˆetre red´efinie :x == ydoit impliquer hash(x) == hash(y)

(8)

Objet appelable

Un appelable (callable) est un objet qui peut etre utilis´e comme une fonction Tout objet dont la classe poss`ede la m´ethode call (self[,arg, ...])est un appelable

Point2D

def __call__(self, x, y):

self.x = x self.y = y

>>> from point import Point2D

>>> pt=Point2D(1,2)

>>> pt(3,4)

>>> pt.x 3

(9)

Conclusion

Rappels : variables, r´ef´erences aux objets, identit´e, ´egalit´e, empreinte Les m´ethodes sp´eciales pour les comparaisons

Les m´ethodes sp´eciales qui permettent aux instances d’une classe d’ˆetre : hashables

appelables

Références

Documents relatifs

As the additional inputs to the compression function, LAKE uses a ran- dom value (also called salt) and an index value, which counts the number of bits/blocks in the input

Here, the user device and the service provider can run a service level agreement (SLA) protocol which supports the two parties in determining the level of privacy sat- isfying both

randomness properties in graphs and hypergraphs (generalized cuckoo hashing [30], also in the version with a “stash” [35], or load balancing [5, 52]), a hash class combining k

Universit´ e Pierre et Marie Curie – Paris 6 Examen de travaux pratiques Licence de Math´ ematiques MA380 – Analyse Hilbertienne et Num´ erique.. 18 janvier 2006 8h30 `

The work needed for these attacks depends on the number of intermediate hash values of the target message, as this determines the work needed to find a linking message from

As foreseen previously, we face two main causes of inconsistencies. On the one hand, we can only expect that the path-finder detects pivot queries in case all pre-pivot queries

We follow and analyze the properties of the dithering sequence used in Rivest’s hash function proposal, and develop a time-memory tradeoff which allows us to apply our

We propose hashing to facilitate efficient ker- nels. This generalizes previous work using sampling and we show a principled way to compute the kernel matrix for data streams and