問題タブ [class-attributes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - python 3 class-method 属性は、存在する前に参照してどのように作成できますか?
Pythonでの単純な実装があるかどうかわからないcodewarsの問題を解決しようとしています。存在する前に参照するだけで、クラスメソッド属性を動的に作成したいと考えています。直感に反するように聞こえます。プロパティがまだ存在せず、外部から値を設定せずに、メソッド内でプロパティを初期化するにはどうすればよいでしょうか?
最初に設定しないと(つまりjohn.is_a.man = True
)、これがどのように可能かわかりません。try/except を使用することが良い戦略であるというわけではありませんが、存在しない属性への参照をキャッチする方法がわからないため、ハンドラーで作成できます。これに関するガイダンスをいただければ幸いです。または、Python ではそれが不可能な場合は、それを知っておくとよいでしょう。
python - ネストされたクラス属性が int として認識されない
目標
新しい項目を追加できるメニューを保存する練習スクリプトを作成しようとしています。項目は「戦闘アニメーション」「文字速度」「字幕」などです。メニューはすべての項目をこのように出力します (すべての項目の間隔が最大のものに合うように調整されていることに注意してください)。
| border color |
| (black) blue red green |
| Text Speed |
| slow (medium) fast |
図1
私のメソッド
MenuItem
自体はクラスです。メニュー項目の内容を管理し、印刷時に必要な調整スペースを保存します。このクラスは、それ自体で完全に機能します。上記の 2 つのアイテムが MenuItem クラスのメソッドのみを使用して作成および印刷された場合、これらは次のようになります
| border color |
| (black) blue red green |
| Text Speed |
| slow (medium) fast |
。
Menu
メニュー項目を保存し、図 1 のように印刷されるように間隔の値を調整するために作成したクラスです。
My Code
このコードは、再現可能なエラーのみを表示するように削減されました。値リスト (黒、青、赤、緑など) は含まれません。
#!/usr/bin/env python3
問題
次のエラーが表示されます。
line 20, in addItem
if(f_menuItem.printsize < self.width):
TypeError: '<' not supported between instances of 'int' and 'MenuItem'
line 24, in printMenuItem
f_title = ((' '*f_indent)+ self.f_title.ljust(self.printsize-f_indent))
TypeError: unsupported operand type(s) for -: 'MenuItem' and 'int'
何らかの理由で、Python は MenuItem のクラス属性 (int) を MenuItem 自体のクラス インスタンスとして解釈しています。少なくともそれが私がエラーを解釈した方法です。
このエラーの奇妙な点は、Menu クラスのメソッドが、内部に保存されている MenuItem インスタンスで MenuItem メソッドを呼び出した場合にのみ発生することです。
前に述べたように、MenuItem クラスが定義され使用されている唯一のクラスである場合、これらのエラーは発生しません。
(また、MenuItem が Menu 内のクラスとして定義されているか、Menu の前に別のクラスとして定義されているかは関係ありません。同じエラーが発生します)
あなたへの私の質問
Pythonが int ではなく MenuItem として解釈するのはなぜf_menuItem.printsize
ですか?
これを回避するために、プログラムを構成する別の方法をおそらく見つけることができます。しかし、それは単なる練習スクリプトです。このエラーを作成するために何が起こっているのかを知りたいだけです。self.printsize