class Point :
	def __init__(self, x, y):
		# Initialisation et déclaration des attributs
		self.x = x
		self.y = y
	def __del__(self):
		print("le point meurt")
	def afficher(self) :
		print("Point :", self.x, "-", self.y)
	def changerCoordonnees(self, nouveaux, nouveauy) :
		self.x = nouveaux
		self.y = nouveauy

class Figure :
	def __init__(self, x, y) :
		self.point = Point(x, y)

class Rectangle :
	def __init__(self, largeur, longueur) :
		self.largeur = largeur
		self.longueur = longueur
	def perimetre(self) :
		return 2 * (self.largeur + self.longueur)
	def aire(self) :
		return self.largeur * self.longueur
	# Permet d'afficher un objet dans le print de Python
	def __str__(self) :
		return "Rectangle de largeur "+ str(self.largeur) + " et de longueur " + str(self.longueur) 
	def __eq__(self, autreRectangle) :
		return self.largeur == autreRectangle.largeur and self.longueur == autreRectangle.longueur


class RectanglePrive :
	def __init__(self, largeur, longueur) :
		self.__largeur = largeur
		self.__longueur = longueur
	def perimetre(self) :
		return 2 * (self.__largeur + self.__longueur)
	def aire(self) :
		return self.__largeur * self.__longueur
	# Permet d'afficher un objet dans le print de Python
	def __str__(self) :
		return "Rectangle de largeur "+ str(self.__largeur) + " et de longueur " + str(self.longueur) 
	def getLargeur(self):
		return self.__largeur
	def setLargeur(self, largeur):
		self.__largeur = largeur
	def getLongueur(self):
		return self.__longueur
	def setLargeur(self, longueur):
		self.__longueur = longueur

class Carre(Rectangle) :
	def __init__(self, largeur) :
		Rectangle.__init__(self, largeur, largeur)
	def __str__(self) :
		return "Carrée de côté "+ str(self.largeur) + "et d'aire " + str(self.aire())


class CarrePrive(RectanglePrive) :
	def __init__(self, largeur) :
		Rectangle.__init__(self, largeur, largeur)
	def __str__(self) :
		return "Carrée de côté "+ str(self.getLargeur())

class Animal():
	def __init__(self, nom) : 
		self.nom = nom
	def mange(self) :
		print(self.nom, "mange")

class Carnivore(Animal):
	def __init__(self, nom) : 
		Animal.__init__(self, nom)
	def mange(self) :
		print(self.nom, "mange de la viande")

class Herbivore(Animal):
	def __init__(self, nom) : 
		Animal.__init__(self, nom)
	def mange(self) :
		print(self.nom, "mange de l'herbe")

class Omnivore(Carnivore, Herbivore):
	def __init__(self, nom) : 
		Carnivore.__init__(self, nom)
		Herbivore.__init__(self, nom)
	def mange(self) :
		print(self.nom, "mange de l'herbe et de la viande")


if __name__ == '__main__':
	point = Point(4,3)
	point.afficher()		# affiche en console Point  4 - 3
	point.changerCoordonnees(1,2)
	point.afficher()		# affiche en console Point  4 - 3
	monRectangle = Rectangle(2,8)
	print(monRectangle)
	print("Aire du rectangle :", monRectangle.aire())	# 16
	print("Périmètre du rectangle :", monRectangle.perimetre()) # 20
	monCarre = Carre(3)
	print(monCarre)
	print("Aire du rectangle :", monCarre.aire())	# 9
	print("Périmètre du rectangle :", monCarre.perimetre()) # 12

	hamtaro = Herbivore("hamtaro")
	garfield = Carnivore("garfield")
	pluto = Omnivore("pluto")
	hamtaro.mange()
	garfield.mange()
	pluto.mange()

	deuxiemeRectangle = Rectangle(8,9)
	print("Les deux rectangles sont-ils égaux ?", deuxiemeRectangle == monRectangle)
	deuxiemeRectangle.largeur = 2
	deuxiemeRectangle.longueur = 8	
	print("Les deux rectangles sont-ils égaux ?", deuxiemeRectangle == monRectangle)

