2017-12-27 859 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一些有用的額外信息。感謝你們兩位。

相關問題