POOgrp10 - Jupyter Notebook http://localhost:8888/notebooks/POOgrp10.
ipynb#
Entrée [43]: class Point3D:
def __init__(self, xm = 0, ym = 0, zm = 0):
"""
__init__ est la méthode magique invoquée automatiquement
par Python lors de la création d'une nouvelle
instance de notre classe.
p = Point3D(5,2,3) cet appel engendre
l'appel de Point3D.__init__(p, 5, 2, 3)
"""
self.x = float(xm)
self.y = float(ym)
self.z = float(zm)
def __repr__(self):
"""
__repr__ est une méthode magique qui est responsable
de la représentation formelle des instances de la classe
Point3D. Cette méthode prend toujours un seul paramètre (self)
qui représente l'objet à représenter et doit OBLIGATOIREMENT
renvoyer un str contenant la représentation formelle de self.
"""
return "Point3D({}, {}, {})".format(self.x, self.y, self.z)
#return "Point3D(" + str(self.x) + "," + str(self.y)
# + "," + str(self.z) + ")"
def __abs__(self):
"""
__abs__ est la méthode magique invoquée par Python, lorsque
la fonction native abs est appliquée sur une instance de
la classe courante.
abs(obj) == > type(obj).__abs__(obj)
"""
import math
return math.sqrt(self.x ** 2 + self.y ** 2 + self.z ** 2)
def __sub__(self, other):
"""
__sub__ est la méthode magique invoquée par Python, lorsque
une instance de notre classe figure à gauche de l'opérateur
de soustraction -.
obj1 - obj2 ==>
obj1.__sub__(obj2) ==>
type(obj1).__sub__(obj1, obj2)
"""
return Point3D(self.x - other.x,
self.y - other.y,
self.z - other.z)
def dist2(self, other):
"""
retourne une float contenant la distance Euclidienne
entre self et other
"""
return abs(self - other)
#return Point3D.__abs__(Point3D.__sub__(self, other))
def plus_proches_voisins(self, pts, n):
lst = sorted(pts, key = lambda pt : pt.dist2(self))
#pt.dist2(self) ==> Point3D.dist2(pt, self)
#lst = sorted(pts, key = lambda pt : self.dist2(pt))
return lst[:n]
1 sur 4 24/10/2019 à 12:31
POOgrp10 - Jupyter Notebook http://localhost:8888/notebooks/POOgrp10.ipynb#
Entrée [37]: p1 = Point3D(2,1)
Entrée [38]: p1
Out[38]: Point3D(2.0, 1.0, 0.0)
Entrée [39]: abs(p1)
Point3D.__abs__(p1)
Out[39]: 2.23606797749979
Entrée [40]: p1 = Point3D(5,0,2)
p2 = Point3D(2,0,6)
p1 - p2
Out[40]: Point3D(3.0, 0.0, -4.0)
Entrée [42]: print(p1.dist2(p2))
print(p2.dist2(p1))
5.0
5.0
Entrée [2]: import datetime
Entrée [3]: d = datetime.date(2000, 1, 1)
Entrée [4]: print(d) # print va transformer d en un texte (str)
#print(d) ==> print(str(d))
#str(d) va engendrer l'invoquation de la méthode magique __str__
#str(d) ==> d.__str__() ==> datetime.date.__str__(d)
2000-01-01
Entrée [5]: str(d)
Out[5]: '2000-01-01'
Entrée [6]: datetime.date.__str__(d)
Out[6]: '2000-01-01'
Entrée [7]: 2000-01-01
File "<ipython-input-7-72a33f36f59e>", line 1
2000-01-01
^
SyntaxError: invalid token
str envoie un texte contenant une représentation informelle de l'objet.
Entrée [8]: d
Out[8]: datetime.date(2000, 1, 1)
Entrée [9]: datetime.date(2000, 1, 1)
Out[9]: datetime.date(2000, 1, 1)
2 sur 4 24/10/2019 à 12:31
POOgrp10 - Jupyter Notebook http://localhost:8888/notebooks/POOgrp10.ipynb#
Entrée [11]: repr(d) #repr est une fonction similaire à str
#qui renvoie une représentation textuelle formelle de l'objet
Out[11]: 'datetime.date(2000, 1, 1)'
l'appel repr(d), engendre l'invocation de la méthode magique d.__repr__()
Entrée [12]: d.__repr__()
Out[12]: 'datetime.date(2000, 1, 1)'
Entrée [13]: datetime.date.__repr__(d)
Out[13]: 'datetime.date(2000, 1, 1)'
Entrée [23]: x = -6
print(abs(x)) # résultat de type int
print(x.__abs__())
print(int.__abs__(x))
6
6
6
Entrée [21]: x = -3.14
abs(x) # résultat de type float
Out[21]: 3.14
Entrée [24]: x = 1+1j
print(abs(x)) #résultat de type float
print(complex.__abs__(x))
1.4142135623730951
1.4142135623730951
Entrée [32]: x1 = 3.14
x2 = -2.34
print(x1 - x2)
print(x1.__sub__(x2))
print(float.__sub__(x1, x2))
5.48
5.48
5.48
Entrée [29]: z1 = 1+2j
z2 = 3-4j
z1 -z2
Out[29]: (-2+6j)
Entrée [33]: s1 = {1,2,3,5}
s2 = {1,2,7,8}
print(s1 - s2)
print(set.__sub__(s1, s2))
{3, 5}
{3, 5}
3 sur 4 24/10/2019 à 12:31
POOgrp10 - Jupyter Notebook http://localhost:8888/notebooks/POOgrp10.ipynb#
Entrée [44]: p0 = Point3D()
p1 = Point3D(1,0,0)
p2 = Point3D(0.1, -0.1, 0.3)
p3 = Point3D(6, 0, 6)
p4 = Point3D(6,6,6)
p5 = Point3D(-1, 0, 0)
s = {p1, p2, p3, p4, p5}
Entrée [45]: p0.plus_proches_voisins(s, 3)
Out[45]: [Point3D(0.1, -0.1, 0.3), Point3D(-1.0, 0.0, 0.0), Point3D(1.0, 0.0, 0.0)]
Entrée [ ]:
4 sur 4 24/10/2019 à 12:31