class TestPoint(unittest.TestCase): def setUp(self): self.a = Point(0, 0, 0) self.b = Point(1, 2, 3) def test_initialisation(self): self.assertIsInstance(self.a, Point, msg=None) self.assertEqual(self.a.x, 0) self.assertEqual(self.a.y, 0) self.assertEqual(self.a.z, 0) def test_setPosition(self): self.a.setPosition(Point(0, 0, 1)) self.assertEqual(self.a.x, 0) self.assertEqual(self.a.y, 0) self.assertEqual(self.a.z, 1) def test_deplacer(self): self.a.deplacer(self.b) self.assertEqual(self.a.x, self.b.x) self.assertEqual(self.a.y, self.b.y) self.assertEqual(self.a.z, self.b.z) def test_toVect(self): v = self.a.toVect() self.assertIsInstance(v, Vecteur, msg=None) self.assertEqual(v.x, self.a.x) self.assertEqual(v.y, self.a.y) self.assertEqual(v.z, self.a.z)
class Objet3D(object): """ Classe definissant un objet 3D de facon abstraite """ def __init__(self, centre=None): """ centre : Point definissant le centre de l'objet. initialise a (0, 0, 0) """ if centre: self.centre = centre else: self.centre = Point(0, 0, 0) def deplacer(self, vecteur): """ deplace les Point dans sommets et centre de l'objet """ self.centre.deplacer(vecteur) def tournerAutour(self, point, teta): """ tourne l'objet d'un angle teta auout d'un point :param point: Point :param teta: float en rad """ self.centre.tournerAutour(point, teta) def __repr__(self): """ Quand on entre un objet3D dans l'interpreteur """ return "Objet3D: centre: {}".format(self.centre) def __getattr__(self, nom): """ Permet d'acceder a un attribut si ce n'est pas possible: """ print("L'attribut {} n'est pas accessible dans {} !".format( nom, type(self)))