Boo-Pythonのような.NET言語

親愛なるHabrausersへの挨拶、私はBooと呼ばれる「別のプログラミング言語」についてお話したいと思います。 この言語は驚くほどほとんど知られていませんが、同時に非常に強力で便利です。そして最も重要なことは、新しい興味深いコンテキスト、つまり.NETインフラストラクチャのコンポーネントとしてのPythonに構文的に非常に類似した言語の実装で良いアイデアを借用する優れた例を示しています。



このメモは主に過去にPythonで働いていた人の観点から書かれたので、ここでは実質的に詳細はありません。次の記事は.NETと組み合わせてBooの詳細に専念します。


貧弱なウィキペディアの記事に目を向けて、Booとは何かを調べましょう。

Booは、.NETプラットフォーム用のオブジェクト指向の静的型付けプログラミング言語です。 2003年に登場。 Pythonに似た構文をサポートします。



Pythonの愛好家は、この時点で無駄にではなく、手をこすり始めなければなりません。 Pythonは非常に優れた言語ですが、残念ながら、すべての問題に対する万能薬ではありません。たとえば、その動的な性質はパフォーマンスに最良の方法で影響を与えず、残念ながらIronPythonとJythonは状況をあまり改善しません。 もちろん、Cなどの外部モジュールに問題のある計算をいつでも転送できますが、これは、再コンパイルせずにさまざまなプラットフォームでコードを実行できる機能と、C言語でコードを記述して喜んでいるPythonistの数に別れを意味します...



ここでBooが役立ちます。既存のプロジェクトを開始できない可能性が高いです。残念ながら、構文はPythonと完全に互換性がなく、外部ライブラリを.NETの類似物に置き換える必要がありますが、新しいアプリケーションを作成するときの代替として考慮することは素晴らしいアイデアです。



Buでコードがどのように見えるかを見てみましょう。個別の部分にスプレーすることはしませんが、1つの例で言語のほとんどの機能を見てみましょう(アヒルについて、彼らは私を感心させます)。 booishおよびbooiインタープリター(それぞれインタラクティブおよび非インタラクティブ)で、またはコードをコンパイルして実行することで、3つの方法で実行できます。 Linuxでは、MonoDevelopをBooのアドオンまたはコマンドラインからboocコンパイラとともにインストールすることにより、これを行うのが最も簡単です。



class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  1. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  2. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  3. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  4. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  5. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  6. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  7. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  8. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  9. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  10. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  11. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  12. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  13. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  14. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  15. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  16. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  17. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  18. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  19. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  20. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  21. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  22. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  23. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  24. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  25. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  26. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  27. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  28. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  29. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  30. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  31. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  32. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  33. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  34. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  35. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  36. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  37. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  38. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  39. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  40. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  41. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  42. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



  43. class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .



class BaseDuck: def Quack(times): for time in range(times): print "Quack!" virtual def Fly(): print "Off we go!" def ToString(): return "Hi, I am BaseDuck" eyes = 2 EyesProperty: get : return eyes set : raise "Sorry, but no" class ChildDuck(BaseDuck): def ToString(): return "Hi, I am ChildDuck" override def Fly(): print "I don't know how to fly" testDuck = BaseDuck() print testDuck testDuck.Quack(2) testDuck.Fly() print testDuck.EyesProperty try : testDuck.EyesProperty = 3 except: pass print testDuck2 = ChildDuck() print testDuck2 testDuck2.Quack(2) testDuck2.Fly() print ducks = ( BaseDuck(), ChildDuck(), BaseDuck()) for oneDuck in ducks: print oneDuck oneDuck.Fly() print duckList = [oneDuck for oneDuck in ducks] for oneDuck in duckList: print oneDuck (oneDuck as BaseDuck).Fly() * This source code was highlighted with Source Code Highlighter .







もちろん、これは言語の完全な機能とはほど遠いですが、.NET関数を完全には使用していません。 boo.codehaus.org/Language+Guideでマニュアルを調べることで 、希望する人は言語のすべての機能を理解できます。標準のPythonを使用して記述したコードとコードを比較します。



それでは、まず、基本クラスBaseDuckを定義します。それで、Pythonに慣れている人にとって何が印象的でしょうか。



私の意見では4つのこと:



Pythonには、アクセスレベル修飾子の概念はありません;オブジェクトのすべての属性にはパブリックアクセスレベルがあります。 (プライベートフィールドのエミュレーションは、__コンストラクトを介して部分的に可能ですが、このコンストラクトはプロパティへのアクセスの順序を変更するだけです)。 ゲッターとセッターを定義する必要がある場合は、@ propertyプロパティデコレーター、および2.6では@ .setter、またはget_およびset_関数のいずれかが役立ちます。 本格的な.NETの後継であるBooは、一連のアクセス修飾子をすべて備えていますが、eyes変数はデフォルトで保護されたアクセスレベルを取得し、クラスの外部からは使用できなくなります。 ただし、EyesPropertyはデフォルトでパブリックであり、eyes変数の値を設定できます。 この特定のケースでは、値を設定することはできませんが、例外をスローします(これは特別な意味はありません。私は2つの目を持つアヒルが最も好きです)。



Booは静的に型付けされた言語であるため、気配りのある人は突然どこにも変数型宣言がないのかと不思議に思うかもしれません。 そして、これは言語の最も快適な機能の1つであり、可能な限りコンパイラが変数のタイプを決定します。 この場合、誰も私たちに手紙を書きません



int = 2としての目



これにより、変数のタイプが明確に示されます。



次のステップは、子鴨のクラスを決定することです。その基本クラスは、以前に作成した子鴨のクラスです。つまり、子鴨は基本的な鴨のすべてのプロパティを利用できます。

子鴨のコードからわかるように、基本のアヒルで定義されているFly関数に戻る時間です。Fly関数はoverrideとして定義されています



仮想関数の定義とその重複を省略できます。これにより、Pythonの実装とまったく同じコードを取得できますが、静的型付けに関連するレーキを踏む可能性があります。 仮想 - オーバーライドペアは、親クラスの機能ではなく、その機能によって子供のアヒルが正確に呼び出されることを保証します (これが明確でない場合は、仮想機能についてGoogleに問い合わせることをお勧めします)。 これらの定義を消去し、プログラムの出力がどのように変化するかを確認できます。55行目では、2番目の要素が別のクラスのオブジェクトとして作成されているにもかかわらず、ベースダックのコンストラクターが3回呼び出されます。



さらにコードでは、BaseDuck型のオブジェクトを作成し(30行目)、その文字列表現がどのように機能するかを観察し(31行目)、関数を呼び出し(Booが途中でジェネレーターをサポートすることに注意してください)、また目のプロパティの値を読み取って設定しようとします。 インストールできないため、 tryで例外を静かに隠していることを示します-ブロック(36-41) を除きます。



最初のアヒルで十分に遊んだ後、赤ちゃんアヒルを作成し、そのクラスで定義された関数が親関数をどのように置き換えるかを確認します。 (このコードは、 仮想タイプがなくても同様に機能します -変数のタイプが明示的に設定されているため、ディレクティブをオーバーライドします



しかし、52行目は理解できないように見えるかもしれません。 しかし、ここではすべてが単純です。BaseDuck型の要素を持つ配列を作成し、3つのアヒルで初期化します。 同時に、不思議なことに、私たちは書いて、



アヒル=(BaseDuck()、ChildDuck()、BaseDuck())



同時に、Booはオブジェクト型のオブジェクトの配列を作成しますが、以降のすべての呼び出しが正常に機能していることを確認し、BaseDuckプロパティを呼び出す場合は、配列の要素の1つを使用するときにオブジェクトをキャストする必要さえありません。



さて、最後に、優れたPython構文を使用してオブジェクトのリストを作成し、配列と同様に繰り返しますが、残念ながらリストには何が含まれているかわからないため、オブジェクトのタイプを指定する必要があります。



ご覧のとおり、この言語は構文的にPythonに非常に近いため、Pythonで書くのは高速で快適です。



長所と短所


それにもかかわらず、客観的なふりをせずに、その過程で見つかったブーの長所と短所について説明します。



長所
短所


参照資料
公式サイト



All Articles