Pythonには型宣言はありません。あると思ってたのは私の誤解です...。
Python中心の話題と、私が触った言語、興味がある言語に基づき話を進めて行きます。
JavaScript2.0以前の型宣言
JavaScript2.0以前は型宣言はない、動的型付け言語です。
JavaScript2.0の型宣言
JavaScript2.0からは型宣言が可能になる。数値型の場合こんな感じ。
var i:Integer = 100;
ちなみに、JavaScript2.0では定数はconstで宣言可能。
参考:http://www.mozilla-japan.org/js/language/js20/libraries/types.html:JavaScript2.0 型
参考:http://d.hatena.ne.jp/amachang/20060520/1148064043:IT戦記 mozillaのjavascript2.0を書いてみた(自分用)
ECMAScript4だと型宣言は数値型の場合こんな感じ。
var i:int = 100;
ecmascript4のインタプリタは下記公式サイトで配布されてるので触れてみるのみいいかも。
参考:http://www.ecmascript.org/index.php:ecmascript
ActionScript3.0の型宣言
調べてないけど、確かECMAScriptと同様だったかと。
(基本、JavaScript, ActionScript, ECMAScriptは親戚も親戚。兄弟や親子みたいな言語だからな...)
本題のPython2.6,Python3の型宣言
結論から言うと、Pythonには型宣言ない。動的片付け言語。
JavaScript2.0とかECMASCript4を調査した後に、
「あれ、Pythonって型宣言できるんだっけ?」と思い、google先生に問い合わせ。
問い合わせた結果、このid:nishiohirokazu氏ダイアリーに到達。
[http://d.hatena.ne.jp/nishiohirokazu/20090213/1234475993:西尾泰和のはてなダイアリー [Python]型の宣言をしてコンストラクタでassert]
class Monster(object):
hitpoint = int
defense = int
attack = int
でこのソースコードを見た時点で私の脳みその判断は...
「Pythonには型宣言がある」
(ちょっ!ソース読めよ!!)...ここが誤解箇所でした。
Pythonの組み込み型を調べる。
そんな誤解をした状態で、Pythonのドキュメント和訳を調べててやっと気づいた訳です...
http://www.python.jp/doc/release/lib/types.html:3. 組み込み型
Pythonの哲学
Pythonでは、言語の各要素の組み合わせ型に一貫性があり、組み合わせ型の種類もごく少なく抑えられています。
との記載があります。
これを私はPythonの哲学の一つであると認識しています。
この哲学を基に考えると、プログラマが任意で型宣言をできる仕組みをPythonが言語として設けるかというとそれはないとすぐ分かったのに〜>_<
追:Scheme(Gauche処理系)
型宣言はない。動的型付け言語。
この点がLispとの大きな違いではないかな...。
(型宣言については処理系によってまちまちな気がするけど。)
(あと、哲学がPythonと似てる気がする。)
追:Lisp(ANCI Common Lisp処理系)
型宣言あり。動的型付け言語。
(こちらもSchemeと同様、型宣言については処理系によってまちまちな気がするけど。)
参考:[http://d.hatena.ne.jp/taka_2/20081010:プログラマとSEのあいだ [Book][Lisp]「Ansi Common Lisp」読了]
追:PHP5.3系
型宣言はありません。動的型付け言語です。
文字列連結時の.やビルドイン関数、ビルドイン関数名に違和感があり好きになれないけど、
使えるレンタルサーバーが多い点、Webに関するサーバーサイド言語としてシェアが高いのが...いや業務で使ってるからあまり言えない...
近年Javaっぽさがまし、クラス、デストラクタ、インストラクタなどが盛り込まれる。
PHPプログラマには是非下記を読んでほしい。
http://www.ibm.com/developerworks/jp/opensource/library/os-php-7oohabits/:IBM developerWorks Japan PHP でオブジェクト指向の設計をするための 7 つの良い習慣を身につける