小编Cam*_*ion的帖子

super().__repr__() 和 repr(super()) 有什么区别?

在巨蟒(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 class repr super python-3.x

6
推荐指数
2
解决办法
1589
查看次数

用c扩展python时,如何处理任意大小的整数?

Python / C API手册提到了来自“¹”的转换函数。和?²?空指针,这似乎是在C.使用任意长度蟒整数的唯一途径
(1):PyLong_FromVoidPtr()和格式0&Py_BuildValue()
(2):PyLong_AsVoidPtr()和格式00&以及0!PyArg_…Parse…()

但是,我还没找到吗?³?在手册中,有关如何使用这些空指针在C中使用这些任意长整数执行任何操作的任何说明。
(3):我尝试搜索«voidptr»,«void *»和«0&»,但尚未完全阅读。

我在哪里可以找到有关它们的内部结构或基元的信息以进行计算?

c python arbitrary-precision python-3.x long-integer

4
推荐指数
1
解决办法
71
查看次数

如何访问 c 扩展中的 numpy 多维数组?

我一直在努力理解 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)

python python-c-api numpy-ndarray

2
推荐指数
1
解决办法
990
查看次数