【问题标题】:How to add/subtract two ctypes.c_double in Python如何在 Python 中添加/减去两个 ctypes.c_double
【发布时间】:2019-07-24 15:46:48
【问题描述】:

简单的问题。我有两个ctypes.c_double我想将它们加在一起或减掉。

我希望能够这样说:

In [1]: c_double(2) + c_double(2)
Out[1]: c_double(4.0)

目前,当我尝试此操作时出现错误:TypeError: unsupported operand type(s) for +: 'c_double' and 'c_double'

我目前的解决方法是这样的:

In [1]: result = c_double(2).value + c_double(2).value

In [2]: c_double(result)
Out[2]: c_double(4.0)

有没有办法直接加/减ctypes.cdouble

【问题讨论】:

    标签: python double ctypes addition subtraction


    【解决方案1】:

    你正在使用别人创建的类,他似乎没有编写处理“+”操作的__add__方法。

    我建议你写你自己的方法:

    def add(self, other):
        return c_double(self.value + other.value)
    

    然后你告诉c_doubleadd 是它的__add__ 方法:

    c_double.__add__ = add
    

    我觉得应该可以

    【讨论】:

    • 它可以工作。您只需在需要添加的每个模块中执行c_double.__add__ = add
    • @Jean-FrançoisFabre 在from ctypes import c_double 之后,您会在每个模块的全局范围内执行此操作吗?
    【解决方案2】:

    您可以继承c_double 类来添加__add__ 方法

    import ctypes
    
    class my_c_double(ctypes.c_double):
        def __add__(self,other):
            return my_c_double(self.value + other.value)
    
    
    a = my_c_double(10)
    b = my_c_double(20)
    
    print((a+b).value)
    

    打印30

    请注意,您可能希望实现 __radd____iadd__ 并检查类型以便能够直接左加浮点数和整数。

    【讨论】:

      猜你喜欢
      • 2017-09-29
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2013-03-06
      • 1970-01-01
      • 2011-07-12
      相关资源
      最近更新 更多