2017-12-27 290 views
1

我试图创建一个使用Python 3.6,Tkinter,特别是不是pygame(或任何其他3D图形引擎)作为大学作业的一部分的三维图形引擎。Python 3.6:使用对象实例名称引发错误

在这个项目中,我不得不创建一个“矩阵”类,它允许我轻松创建和操作mxn矩阵。我相信这对于转换矢量以便在2D显示器上显示项目至关重要。

我希望我的Matrix类包含的一种方法是矩阵乘法。我认为执行此方法时要检查的第一件(也是最重要的)事情是确保第一个矩阵的宽度等于第二个矩阵的高度,因为这是将两个矩阵相乘所必需的。

如果两个矩阵不能相乘,我提出一个类型错误,在我想说

矩阵乘法不可能的{第一矩阵的名字}宽度: ({值})不等于{第二矩阵的名称}:({值}的高度。

例如

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) 

这应,当所有工作时,尝试执行{苹果X梨}数学运算,与苹果第一和梨第二

在这种情况下具体地,乘法是显然不可能:苹果是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) 

我相信我需要我的矩阵类中定义的__name__属性,例如,当苹果.__ name__是称为,它返回一个包含名称“apple”的字符串。这可能吗?这是个好主意吗?有没有更好的编码习惯,我应该遵循?

感谢

+1

这不是一个好主意。如果该对象被分配给多个名称,或者没有(例如,只能通过列表或字典等集合访问),该怎么办?特别是使用'__name__'是一个坏主意,不要为保留的标识符发明自己的用法。只要给出一个合理的['__repr__'实现](https://docs.python.org/3/reference/datamodel.html#object.__repr__),这样你就可以看到需要的值。 – jonrsharpe

+0

嗨乔恩,感谢您的回复, 所以你认为它通常只是一个糟糕的路线下去?我认为能够确定不兼容的矩阵是否相乘是非常重要的,但我认为这并不重要。 一般来说,我只是想学习更好的编码实践,所以你的回复是真正有用的 - 尽管简短的回答是“不”! 干杯 –

+0

保存对对象的引用时使用的变量名不是对象的一部分。同一个对象可以有多个名字。 –

回答

0

我想,以纪念这个问题的回答:jonrsharpe的在评论答案解释得很好,并添加Bryan Oakley一些有用的额外信息。感谢你们两位。

相关问题