虽然我在尝试解决某个问题,但是我正面临着一些我不知道如何克服的问题。
我需要在一个类中编码一个方法,它代表一个矩阵,这个方法用于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(其他,self)在必须为True之前执行条件,但我得到它False所以程序运行到else :部分并执行其他程序。
我试图用条件包含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):给Class Vec的所有实例赋予False,是否存在获取Vec == type(other)的结果的方法:如果isinstance(其他,Vec)类似于条件的结果:??
如果Vec == type(other),则提出条件或任何建议:给予True。
一个注意事项:我正在使用Python 3.2.3,而评分者正在使用Python 3.3.2
感谢。
答案 0 :(得分:3)
isinstance()
测试该类型的或子类。
不要使用== type(..)
;你会改用issubclass()
:
issubclass(type(other), Vec)
但是isinstance()
要好得多,因为它避免了首先要查找类型。
最后但并非最不重要的是,类型是单身,对is
身份的测试会稍微好一些:
Vec is type(other)
但不是更好。
请注意,对于旧样式类(任何不从object
继承的内容)type()
都不会返回该类,而是<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
正确处理了这种情况:
{{1}}