Python - 对象的类型检查实例

Python - Type Checking Instances of Objects

我正在创建一个模拟数字类型的 class,以便能够在这个 [= 的实例上使用基本算术运算符,例如 +- 等39=]。但是,我希望能够根据操作数的类型以不同的方式处理操作。例如,如果我正在创建一个带有 __add__() 的 class foo_c 作为函数,那么我希望能够处理一个操作数类型为 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() 函数设为 return 用作字典键的适当值。在创建实例 class 为 foo = foo_c() 后,内置函数 type(foo) returns instance 而不是 foo_c。我认为这是因为我没有创建有问题的对象;相反,我正在创建对象的实例。我也用过 foo.__class__,但是我得到 __main__.foo_c 作为 returned class,这也不对...

我不想使用 isinstance() 行检查,那么有没有办法根据需要将 type() 到 return class?

您忘记让 foo_c 继承自 object,所以您得到的是旧式 class。让它继承自 object:

class foo_c(object):
    ...