diff --git a/python-api-src/lib_point.cpp b/python-api-src/lib_point.cpp
index 40bc11a83c951f16450838d6b6732287515751f0..825500d223f9ceb32cf9320b94c670f35041abd8 100644
--- a/python-api-src/lib_point.cpp
+++ b/python-api-src/lib_point.cpp
@@ -33,10 +33,18 @@ void define_point(py::module & m)
                 return "(" + std::to_string(p.x) + ", " + std::to_string(p.y) + ")";
             });
 
-       py::class_<sc2::Point2DI>(m, "Point2DI", py::dynamic_attr())
-           .def(py::init<int, int>())
-           .def_readwrite("x", &sc2::Point2DI::x)
-           .def_readwrite("y", &sc2::Point2DI::y)
-           .def(py::self == py::self)
-           .def(py::self != py::self);
+    py::class_<sc2::Point2DI>(m, "Point2DI", py::dynamic_attr())
+        .def(py::init<int, int>())
+        .def_readwrite("x", &sc2::Point2DI::x)
+        .def_readwrite("y", &sc2::Point2DI::y)
+        .def(py::self == py::self)
+        .def(py::self != py::self)
+        .def("__repr__",
+            [](const sc2::Point2DI & p) {
+                return "<Point2D: (" + std::to_string(p.x) + ", " + std::to_string(p.y) + ")>";
+            })
+        .def("__str__", 
+            [](const sc2::Point2DI & p) {
+                return "(" + std::to_string(p.x) + ", " + std::to_string(p.y) + ")";
+            });
 }
\ No newline at end of file