Python - 对象的类型检查实例
Python - Type Checking Instances of Objects
我正在创建一个模拟数字类型的 class,以便能够在这个 [= 的实例上使用基本算术运算符,例如 +
、-
等39=]。但是,我希望能够根据操作数的类型以不同的方式处理操作。例如,如果我正在创建一个带有 __add__()
的 class foo_c
作为函数,那么我希望能够处理一个操作数类型为 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()
函数设为 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):
...
我正在创建一个模拟数字类型的 class,以便能够在这个 [= 的实例上使用基本算术运算符,例如 +
、-
等39=]。但是,我希望能够根据操作数的类型以不同的方式处理操作。例如,如果我正在创建一个带有 __add__()
的 class foo_c
作为函数,那么我希望能够处理一个操作数类型为 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()
函数设为 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):
...