input: 
  from typing import List
  
  class Vector3D:
      def __init__(self, x: float, y: float, z: float):
          self._x = x
          self._y = y
          self._z = z
      
      def __str__(self) -> str:
          """Returns a string representation of the 3D vector in the form (x, y, z).
          
          Example:
          >>> vec = Vector3D(1.0, 2.0, 3.0)
          >>> str(vec)
          '(1.0, 2.0, 3.0)'
          """
          return "(" + str(self._x) + ", " + str(self._y) + ", " + str(self._z) + ")"
  
output:     
      def __repr__(self) -> str:
          return f"Vector3D(x={self._x}, y={self._y}, z={self._z})"
  
      def __eq__(self, other: object) -> bool:
          if not isinstance(other, Vector3D):
              return False
          return self._x == other._x and self._y == other._y and self._z == other._z
  
      def __add__(self, other: 'Vector3D') -> 'Vector3D':
          return Vector3D(self._x + other._x, self._y + other._y, self._z + other._z)
  
      def __sub__(self, other: 'Vector3D') -> 'Vector3D':
          return Vector3D(self._x - other._x, self._y - other._y, self._z - other._z)
  
      def __mul__(self, scalar: float) -> 'Vector3D':
          return Vector3D(self._x * scalar, self._y * scalar, self._z * scalar)
  
      def __rmul__(self, scalar: float) -> 'Vector3D':
          return self.__mul__(scalar)
  
      def __truediv__(self, scalar: float) -> 'Vector3D':
          return Vector3D(self._x / scalar, self._y / scalar, self._z / scalar)
  
      def magnitude(self) -> float:
          return (self._x ** 2 + self._y ** 2 + self._z ** 2) ** 0.5
  
      def dot(self, other: 'Vector3D') -> float:
          return self._x * other._x + self._y * other._y + self._z * other._z
  
      def cross(self, other: 'Vector3D') -> 'Vector3D':
          return Vector3D(
              self._y * other._z - self._z * other._y,
              self._z * other._x - self._x * other._z,
              self._x * other._y - self._y * other._x
          )
  