Python 3.6: 使用对象实例名来引发错误
Python 3.6: Using object instance name for raising errors
我正在尝试使用 Python 3.6、Tkinter 创建 3-d 图形引擎,特别是不是 pygame(或任何其他 3d 图形引擎)作为大学作业的一部分。
在这个项目中,我不得不创建一个 "matrix" class,它允许我轻松地创建和操作 mxn 矩阵。我认为这对于转换矢量以便在 2d 显示器上显示项目至关重要。
我希望矩阵 class 包含的一种方法是矩阵乘法。我认为执行此方法时要检查的第一件(也是最重要的)事情是确保第一个矩阵的宽度等于第二个矩阵的高度,因为这是将两个矩阵相乘所必需的。
如果两个矩阵不能相乘,我会抛出一个TypeError,其中我想说
"矩阵乘法不可能。{第一个矩阵的名称}的宽度:
({value}) 不等于 {第二个矩阵的名称} 的高度:({value})".
例如
apple = Matrix(2, 3, List_of_values)
#creates a matrix instance that is 2x3 and contains 6 values from a list
pear = Matrix(4, 3, Another_list_of_values)
#creates a matrix that is 4x3 and contains 12 values from another list
apple.multiply(pear)
当一切正常时,这应该尝试执行 {apple x pear} 数学运算,特别是首先是苹果,其次是梨
在这种情况下,乘法显然是不行的:苹果是2高3宽,梨是5高3宽。我想提出这样的错误:
TypeError: Matrix multiplication not possible: Width of apple (3) is not equal to height of pear (4)
相反,我得到这个:
TypeError: Matrix multiplication not possible: Width of <__main__.Matrix object at 0x1056117b8> (3) is not equal to height of <__main__.Matrix object at 0x105618e80> (4)
我认为我需要在我的矩阵 class 中定义 __name__ 属性,这样当 apple.__name__ 被调用时,它 returns 一个包含名称的字符串"apple"。这可能吗?这是个好主意吗?有没有我应该遵循的更好的编码实践?
谢谢
我想将此问题标记为已回答:jonrsharpe's answer in the comments explained it well, and Bryan Oakley 添加了一些有用的额外信息。谢谢你们。
我正在尝试使用 Python 3.6、Tkinter 创建 3-d 图形引擎,特别是不是 pygame(或任何其他 3d 图形引擎)作为大学作业的一部分。
在这个项目中,我不得不创建一个 "matrix" class,它允许我轻松地创建和操作 mxn 矩阵。我认为这对于转换矢量以便在 2d 显示器上显示项目至关重要。
我希望矩阵 class 包含的一种方法是矩阵乘法。我认为执行此方法时要检查的第一件(也是最重要的)事情是确保第一个矩阵的宽度等于第二个矩阵的高度,因为这是将两个矩阵相乘所必需的。
如果两个矩阵不能相乘,我会抛出一个TypeError,其中我想说
"矩阵乘法不可能。{第一个矩阵的名称}的宽度: ({value}) 不等于 {第二个矩阵的名称} 的高度:({value})".
例如
apple = Matrix(2, 3, List_of_values)
#creates a matrix instance that is 2x3 and contains 6 values from a list
pear = Matrix(4, 3, Another_list_of_values)
#creates a matrix that is 4x3 and contains 12 values from another list
apple.multiply(pear)
当一切正常时,这应该尝试执行 {apple x pear} 数学运算,特别是首先是苹果,其次是梨
在这种情况下,乘法显然是不行的:苹果是2高3宽,梨是5高3宽。我想提出这样的错误:
TypeError: Matrix multiplication not possible: Width of apple (3) is not equal to height of pear (4)
相反,我得到这个:
TypeError: Matrix multiplication not possible: Width of <__main__.Matrix object at 0x1056117b8> (3) is not equal to height of <__main__.Matrix object at 0x105618e80> (4)
我认为我需要在我的矩阵 class 中定义 __name__ 属性,这样当 apple.__name__ 被调用时,它 returns 一个包含名称的字符串"apple"。这可能吗?这是个好主意吗?有没有我应该遵循的更好的编码实践?
谢谢
我想将此问题标记为已回答:jonrsharpe's answer in the comments explained it well, and Bryan Oakley 添加了一些有用的额外信息。谢谢你们。