patch 9.0.1925: if_python: still undefined behaviour with function pointer

Problem:  if_python: still undefined behaviour with function pointer
Solution: fix remaining problems

Fix remaining issues in the if_python code in casting incompatible
function pointers leading to Clang 17 giving runtime errors during
UBSAN.

closes: #13140

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
diff --git a/src/if_python3.c b/src/if_python3.c
index e14185e..9d53caf 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -1533,7 +1533,7 @@
 {
     GET_ATTR_STRING(name, nameobj);
 
-    return OutputSetattr((OutputObject *)(self), name, val);
+    return OutputSetattr(self, name, val);
 }
 
 ///////////////////////////////////////////////////////
@@ -1611,7 +1611,7 @@
 {
     GET_ATTR_STRING(name, nameobj);
 
-    return BufferSetattr((BufferObject *)(self), name, val);
+    return BufferSetattr(self, name, val);
 }
 
 //////////////////
@@ -1837,7 +1837,7 @@
 {
     GET_ATTR_STRING(name, nameobj);
 
-    return WindowSetattr((WindowObject *)(self), name, val);
+    return WindowSetattr(self, name, val);
 }
 
 // Tab page list object - Definitions
@@ -1911,7 +1911,7 @@
 DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
 {
     GET_ATTR_STRING(name, nameobj);
-    return DictionarySetattr((DictionaryObject *)(self), name, val);
+    return DictionarySetattr(self, name, val);
 }
 
 // List object - Definitions
@@ -1931,7 +1931,7 @@
 ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
 {
     GET_ATTR_STRING(name, nameobj);
-    return ListSetattr((ListObject *)(self), name, val);
+    return ListSetattr(self, name, val);
 }
 
 // Function object - Definitions