2017-12-27 23 views
1

Python 3.6、Tkinter、特にpygame(または他の3Dグラフィックエンジン)を使用して大学の割り当ての一部として3-Dグラフィックスエンジンを作成しようとしています。Python 3.6:エラーを発生させるためにオブジェクトインスタンス名を使用する

このプロジェクトでは、「行列」クラスを作成しなければならなかったので、mxn行列を簡単に作成し操作することができました。私はこれを2Dディスプレイ上にアイテムを表示するためにベクトルを変換するために重要と考えています。

私のMatrixクラスに含まれる1つのメソッドは、行列の乗算です。私は、このメソッドを実行するときにチェックする最初の(そして最も重要な)ことは、2つの行列を一緒に乗算するのに必要なように、最初の行列の幅が2番目の行列の高さと同じであることを確認することです。二つの行列が掛け合わさすることができない場合は

、私はここで、私は

行列の乗算ではない可能言いたい、TypeErrorを送出し{第1の行列の名前}の幅:。 ({値})は、高さが{第2の行列の名前}と等しくない:({値} "と等しくない。 Appleと

例えば

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は、いくつかの有用な追加情報を追加しました。あなたのおかげで両方。

関連する問題