私は本当に驚いています。どうして?それは研究努力を示していますか?いいえ!多分OPは研究をしましたが、彼はそれを明らかにしませんでした。それは有用ですか?それは明確ですか?匿名のオブジェクトを渡すことに問題があることは明らかです。しかし、知識を得ることにおける彼の個人的な闘争がなぜ有用なのでしょうか?
単純な点線の灰色の楕円を作るために、スーパーフルーズコードの入力に多くの "労力"をかけなければならない理由は不思議です。 まず、 "Qt"ではオブジェクト指向のフレームワークを使用していることに注意してください。したがって、用語と概念的には、オブジェクトをインスタンス化する一連のクラスを使用しています。タイプと呼ぶものはクラスです。 TYPEQt.Pen
をsetPenに渡すが、あなたはオブジェクトを定義し
Pythonでは、引数の暗黙的な型チェックはありません。 (「点線」、「グレー」、0)
grid.setPenを
しかしこの方法では、それはして慣れていて、それらを処理する方法を知っているいくつかのオブジェクトを期待:だから、あなたが提案するもの、渡すことができます。文字列オブジェクトそれは、処理するを知らない。だから、それは何をすべきかを説明するためにあなたの仕事でしょう。そのため、サブクラスQt.Pen
に、文字列を処理できるコンストラクタ、またはQt.Penクラスを直接変更する必要があります。 QTを後で再コンパイルしてください。
私はQt.Pen
クラスが最適な例ではないことを認めています。だから、基本的な概念を説明するためのより良い例と、誤った前提のもとでのどこにあるのかを示すことができます。
しかし、最初に私はあなたの「サロゲート」問題がオブジェクト指向のパラダイムを理解するための大きな混乱から生じていると主張しますが、より大きな洞察力の欠如であなたの混乱の原因を見分けることはできませんでした問題。
ローマには多くの道があります。あなたが取る道はあなたのものです。しかし、 "Qt"を使用することを決定したら、すでに一般的な道路セットを決めました。そしてそれらはオブジェクトのために構築されています。
家をいくつか描きたいとします。だから我々は、使用方法をdraw_house
定義(ところで、あなたの元の質問で探していたまさにです)magical_drawing_routine
:
def draw_house(house):
magical_drawing_routine(house)
draw_house('parentshome')
draw_house('myhome')
は、今、私たちはドア、窓や美しい煙突なしで正確に二つの同一の描かれた家を得ました親の家の私たちは、正確に二つの同一描かれた家を得た今
def draw_house(door, window, chimney):
magical_drawing_routine(door, window, chimney)
parentshome = ['oak', 'green', 'yes']
myhome = ['beech', 'red', 'no']
draw_house(parentshome)
draw_house(myhome)
:私たちはこれらの不足を修正します戻る製図板へ
(そして、我々は完全にmagical_drawin_routine
が文字列値をinterpreteする方法を知っている方法を無視しています)ドア、窓、そして親の家の素敵な煙突があります。しかし、窓とドアはまったく同じ形をしています。戻る製図板に...
一部cylcesた後、あなたのようなものだろう:
def draw_house(doormaterial, doorcolor, doorshape, doorwithglass, doorglassparts, windowsnumber, widnowsdistributionpattern, windowsencassing, windowmaterial, windowshape, windowpattern, windowdecoration, chimney):
...
または私たちは、クラス定義することができます。適切なデフォルト値でclass House, class Window, class Door, class Chimney
を。
pdoor, mdoor = Door(a,b), Door(a,Z)
pwin, mwin = Window(e,f,g), Window(e,f,Y)
pchimney, mchimney = Chimney(h), Chimney(X)
parentshome = House(pdoor, pwin, pchimney)
myhome = House(mdoor, mwin, mchimney)
あなたがあなたの親に一度だけのためにドアを使用している場合、あなたはpdoor定義をforgoeことができ、匿名オブジェクト(なし変数添付)をgerenatingことで、引数を渡すながら、オンザフライオブジェクトをインスタンス化します。 parentshome =ハウス(ドア(...)、...)
したがって、簡単な答えは:あなたはタイプを渡さない! オブジェクトを渡します。通常はのカプセル化複雑度です。しかし、ひどいシンプルなオブジェクトの場合、シンプルなものを複雑すぎるように見えるかもしれませんが、それはそのように見えます。
これは単なる不可能なことであり、あなたが物事を考えなかったことを示しています。あなたがそれを提案したやり方では、すべての機能はすべてを知る必要があります。あなたの質問を再考してください。これは陽気です。 –
私はこの質問が面白いようになるならば、私は謝罪します。私はプログラミングで教えられ、多くの理論を知らない。なぜそんなにばかなことを説明できますか?私が学んだ最初のプログラミング言語はMatlabでした。これはあなたが私が言ったことを正確に行うことを可能にします:plot(x、 'r-') – jminardi
http://en.wikipedia.org/wiki/Data_typeはすでにいくつかの答えを含んでいました。正式なコンピュータサイエンス教育がなくても簡単に見つけました。私の返事も見てください。 –