Python - 类型检查对象实例

时间:2016-09-08 21:48:32

标签: python class object instance typechecking

我正在创建一个模拟数字类型的类,以便能够在此类的实例上使用基本算术运算符,如+-等。但是,我希望能够以不同的方式处理操作,具体取决于操作数的类型。例如,如果我使用foo_c创建一个类__add__()作为函数,那么我希望能够处理一个操作数类型为foo_c而另一个是类型为intfloatnumpy.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()根据需要返回班级?

1 个答案:

答案 0 :(得分:1)

您忘记foo_c继承object,因此您正在获得旧式课程。让它继承自object

class foo_c(object):
    ...