text: #!/usr/bin/python3
  """9 - A square is a rectangle"""
  
  
  class Rectangle():
      """Representation of a Rectangle"""
  
      number_of_instances = 0
      print_symbol = "#"
  
      def __init__(self, width=0, height=0):
          """Instantiation with width and height"""
          self.width = width
          self.height = height
          Rectangle.number_of_instances += 1
  
      @property
      def width(self):
          """Property to retrieve width"""
          return self.__width
  
      @width.setter
      def width(self, value):
          """Property setter to set width"""
          if type(value) is not int:
              raise TypeError("width must be an integer")
          elif value < 0:
              raise ValueError("width must be >= 0")
          self.__width = value
  
      @property
      def height(self):
          """Property to retrieve height"""
          return self.__height
  
      @height.setter
      def height(self, value):
          """Property setter to set height"""
          if type(value) is not int:
              raise TypeError("height must be an integer")
          elif value < 0:
              raise ValueError("height must be >= 0")
          self.__height = value
  
      def area(self):
          """Public method that returns the area of the rectangle"""
          return (self.width * self.height)
  
      def perimeter(self):
          """Public method that returns the perimeter of the rectangle"""
          if self.width == 0 or self.height == 0:
              return 0
          return ((self.width * 2) + (self.height * 2))
  
      def __str__(self):
          """__str__ method for rectangle"""
          if self.width == 0 or self.height == 0:
              return ("")
          string = ""
          for i in range(self.height):
              for j in range(self.width):
                  string += str(self.print_symbol)
              if i != self.height - 1:
                  string += '\n'
          return string
  
      def __repr__(self):
          """__repr__ method for rectangle"""
          return ("Rectangle(" + str(self.width) + ", " + str(self.height) + ")")
  
      def __del__(self):
          """__del__ method for rectangle"""
          print("Bye rectangle...")
          Rectangle.number_of_instances -= 1
  
      @staticmethod
      def bigger_or_equal(rect_1, rect_2):
          """Static method that returns the biggest rectangle based on area"""
          if type(rect_1) is not Rectangle:
              raise TypeError("rect_1 must be an instance of Rectangle")
          if type(rect_2) is not Rectangle:
              raise TypeError("rect_2 must be an instance of Rectangle")
          if rect_1.area() >= rect_2.area():
              return rect_1
          else:
              return rect_2
  
      @classmethod
      def square(cls, size=0):
          """Class method that returns a rectangle with width==height==size"""
          return cls(size, size)
  