在巨蟒(3.5.2),我期待的repr(obj)函数调用魔术方法__repr__()的obj的课。然而,调用它们似乎不会产生相同的结果。谁能解释为什么?
示例代码:
class parent:
def __init__(self):
self.a = "haha"
def __repr__(self):
return repr(self.a)
class child(parent):
def __init__(self):
super().__init__()
self.b="bebe"
def __repr__(self):
return "("+super().__repr__()+", "+repr(super())+", "+self.b+")"
def print1(self):
print("super().__repr__() returns:", super().__repr__())
print("repr(super()) returns:", repr(super()))
print("plom(super()).__repr__() returns:", plom(super()).__repr__())
print("repr(plom(super())) returns:", repr(plom(super())))
def plom(var):
return var
t=child()
print(t.__repr__())
print(repr(t))
print('-----')
t.print1()
print('-----')
print(plom(t).__repr__())
print(repr(plom(t)))
Run Code Online (Sandbox Code Playgroud)
结果 :
>>>
RESTART: test super.py
('haha', <super: <class 'child'>, <child object>>, bebe)
('haha', <super: <class 'child'>, <child object>>, bebe)
-----
super().__repr__() returns: …Run Code Online (Sandbox Code Playgroud) Python / C API手册提到了来自“¹”的转换函数。和?²?空指针,这似乎是在C.使用任意长度蟒整数的唯一途径
(1):PyLong_FromVoidPtr()和格式0&与Py_BuildValue()
(2):PyLong_AsVoidPtr()和格式0,0&以及0!与PyArg_…Parse…()
但是,我还没找到吗?³?在手册中,有关如何使用这些空指针在C中使用这些任意长整数执行任何操作的任何说明。
(3):我尝试搜索«voidptr»,«void *»和«0&»,但尚未完全阅读。
我在哪里可以找到有关它们的内部结构或基元的信息以进行计算?
我一直在努力理解 C 扩展中对 numpy 数组的访问,但我很难理解文档。
编辑:这是我想移植到 c 的代码(grav 函数)
import numpy as np
def grav(p, M):
G = 6.67408*10**-2 # m³/s²T
l = len(p[0])
a = np.empty(shape=(2, l))
a[:, 0] = 0
for b in range(1, l):
# computing the distance between body #b and all previous
d = p[:, b:b+1] - p[:, :b]
d2 = (d*d).sum(axis=0)
d2[d2==0] = 1
XXX = G * d * d2**(-1.5)
# computing Newton formula :
# acceleration undergone by b from all previous …Run Code Online (Sandbox Code Playgroud)