0

当我试图解决我正在学习的某些课程中的问题时,我最终面临着一些我不知道如何克服的问题。

我需要在一个Class中编写一个方法,它代表一个矩阵,这个方法是vector_matrix乘法,现在老师给我们提供了一个代表Class的代码,它包含了类的定义,我们的职责是完成一些程序(方法)。

我以它的名字工作的代码是vector_matrix_mul(v, M) 其中v是一个向量,M是一个矩阵这个方法将在我们正在设计的Class Mat中,现在我写了一个代码,它在我的电脑上运行良好,但问题是这样的。

Class Mat 有以下方法。

def __rmul__(self, other):
    if Vec == type(other):
        return vector_matrix_mul(other, self)
    else:  # Assume scalar
        return scalar_mul(self, other)

这里 Vec 是向量的一个类,现在为了让我的方法 vector_matrix_mul(other, self) 在它必须为 True 之前执行条件,但我得到它 False 所以程序运行到 else: 部分和执行其他程序。

我试图替换条件 contains type() 所以上面的代码如下:

def __rmul__(self, other):
    if isinstance(other, Vec):
        return vector_matrix_mul(other, self)
    else:  # Assume scalar
        return scalar_mul(self, other)

并且代码正在运行,所以现在我不知道如何避免这个问题,在测试我的程序时 if Vec == type(other): 为 Vec 类的所有实例提供 False ,有没有办法得到 if Vec == type(other): 的结果类似于 if isinstance(other, Vec): ??

或者如果 Vec == type(other): 给出 True 的任何建议。

注意:我使用的是 Python 3.2.3,而评分者使用的是 Python 3.3.2

谢谢。

4

1 回答 1

3

isinstance()测试该类型的类型或子类

永远不要使用== type(..); 你会issubclass()改用:

issubclass(type(other), Vec)

isinstance()要好得多,因为它避免了首先查找类型。

最后但并非最不重要的一点是,类型是单例,is身份测试会稍微好一些:

Vec is type(other)

但也好不到哪里去。

请注意,对于旧样式类(任何不继承自的类objecttype()将不会返回该类,<type 'instance'>而是;你必须other.__class__改用。isinstance()正确处理这种情况:

>>> class Foo: pass
... 
>>> f = Foo()
>>> type(f)
<type 'instance'>
>>> f.__class__
<class __main__.Foo at 0x1006cb2c0>
>>> type(f) is Foo
False
>>> f.__class__ is Foo
True
>>> isinstance(f, Foo)
True
于 2013-08-05T11:01:27.540 回答