我正在创建一个模拟数字类型的类,以便能够在此类的实例上使用基本算术运算符,如+
,-
等。但是,我希望能够以不同的方式处理操作,具体取决于操作数的类型。例如,如果我使用foo_c
创建一个类__add__()
作为函数,那么我希望能够处理一个操作数类型为foo_c
而另一个是类型为int
或float
或numpy.ndarray
(或foo_c
)。
我想要实现的解决方案是有一组'adder'函数,可以根据操作数类型进行切换。正在将不同的功能分配给字典:
class foo_c:
...
self.addOps = { int: self.addScalar,
float: self.addScalar,
foo_c: self.addFoo }
...
self.addScalar(self, sclr):
...
self.addFoo(self, foo):
...
self.__add__(self, operand):
return self.addOps[type(operand)](operand)
我遇到的问题是我无法使type()
函数返回适当的值以用作字典的键。在将类的实例创建为foo = foo_c()
后,内置函数type(foo)
将返回instance
而不是foo_c
。我认为这是因为我没有创建有问题的对象;而是我正在创建一个对象的实例。我也使用了foo.__class__
,但是将__main__.foo_c
作为返回的类,这也不正确......
我不想使用isinstance()
行检查,那么有没有办法让type()
根据需要返回班级?
答案 0 :(得分:1)
您忘记foo_c
继承object
,因此您正在获得旧式课程。让它继承自object
:
class foo_c(object):
...