トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン


#author("2022-07-22T09:35:24+09:00","default:raku","raku")
[[スクリプティング言語]]

#ref(http://www.python.org/images/python-logo.gif)
[[Python Programing Langage>http://python.org/]]

このページの参照数 &counter; 回

現在のPythonの最新バージョン・・・2.5.1(New! 2007.04.18)~
そして、期待のpy3kことPython3000のα版・・・3.0a1(New! 2007.08.31)~

#contents

*リンク(徐々に増やします) [#r904c3bc]
*リンク(随時更新) [#r904c3bc]

**日本語のサイト [#sfdfd35a]

***一般サイト [#b0f25676]

-[[PyJUG>http://www.python.jp/Zope/]]~
日本のPythonユーザグループ~
リンクのページに、日本人ユーザのページ/ブログの一覧があります

-[[GEMBOOK.jp>http://www.gembook.jp/tsum/page.pys]]~
PyJUGの石本さんのWikiサイト~
(いろいろエキサイティング)~
// デッドリンクになっていたので、いったん外します
// -[[GEMBOOK.jp>http://www.gembook.jp/tsum/page.pys]]~
// PyJUGの石本さんのWikiサイト~
// (いろいろエキサイティング)~

-[[Cafe de Paison>http://paison.hp.infoseek.co.jp/paison/index.html]]~
いろいろ面白いサイト~
GUI関連の説明はとっても親切~
GUI関連の説明はとっても親切

-[[Zopeジャンキー日記>http://mojix.org/]]~
イロイロ面白い情報満載~
-[[Zopeジャンキー日記:http://mojix.org/]]~
イロイロ面白い情報満載

-[[新山祐介さんのサイト>http://www.unixuser.org/~euske/index.html]]~
pygame関連の翻訳ドキュメントがあります~
-[[新山祐介さんのサイト:http://www.unixuser.org/~euske/index.html]]~
pygame関連の翻訳ドキュメントがあります

-[[Pythonのお勉強Wiki>http://www7a.biglobe.ne.jp/~yasozumi/python/wiki/]]~
Pythonを勉強したい人のための情報集。2chのPythonスレが起源です。~
-[[Pythonのお勉強Wiki:http://python.rdy.jp/]]~
Pythonを勉強したい人のための情報集。2chのPythonスレが起源です~
(リンク貼りなおしました)

***初心者用サイト [#h23e25b8]
-[[The History of Python.jp:http://python-history-jp.blogspot.com/]]~
Pythonの歴史を知りたい方はこちらに([[原文:The History of Python:http://python-history.blogspot.com/]])

-[[Python入門 ~ニシキヘビを飼おう~>http://www.f7.ems.okayama-u.ac.jp/~yan/python/]]~
***初心者用入門/紹介サイト [#h23e25b8]

-[[Python入門 ~ニシキヘビを飼おう~:http://www.f7.ems.okayama-u.ac.jp/~yan/python/]]~
入門サイトの定番~
1.5.2ベースだけど、大まかなとこは問題なし~
1.5.2ベースだけど、大まかなとこは問題なし

-[[Python Tutorial 和訳>http://www.python.jp/doc/release/tut/]]~
初心者はまずここ、かな?~
-[[Python Tutorial 和訳:http://www.python.jp/doc/release/tut/]]~
初心者はまずここ、かな?

-まずはPythonではじめよう~
Python初心者用メーリングリスト(2007.8.31に終了しました)~
-[[Pythonをはじめよう(CodeZine):http://codezine.jp/a/article/aid/1617.aspx]]~
CodeZineの連載記事です。他言語を知ってる方が、さらっと見るには便利。

-PはPythonのP~
Python入門者のための小説形式の入門文書~
同じく機械伯爵の個人blog『[[時間城年代記>http://blog.livedoor.jp/kikwai/]]』~
にて、連載小説(ライトノベル)形式で、~
週一程度で連載中~
(&color(#800){2005.12.20とりあえず終了しました};)~
(&color(#800){2006.02.25無謀にも新連載、し、死む(今度は週一ではありません〈中断〉)};)~
有用性はともかく、肩の力を抜いて読めます~
(心なしかPythonよりRPGの話の方が多いような気が…)~

***リンク [#p8a2a704]

-[[紹介マニア>http://sakito.s2.xrea.com/]]~
リンクが豊富で楽しいです~
リンクが豊富で楽しいです

-[[TSNetworkのJapanese Python Links>http://homepage1.nifty.com/kazuf/pythonlinks.html]]

**英語サイト [#p2df2bf1]

-[[Python Programming Language>http://www.python.org/]]~
Pythonの総本山~
Pythonの総本山

-[[Stackless Python>http://www.stackless.com/]]~
スタックを使わないPythonの実装・・・らしいです~
スタックを使わないPythonの実装・・・らしいです

-[[Starship Python>http://starship.python.net/]]~
Pythonのコミュニティー~
Pythonのコミュニティー

-[[Jython Home Page>http://www.jython.org/]]~
JavaVM上に実装されたPython~
JavaVM上に実装されたPython

-[[MoinMoin>http://moin.sourceforge.net/]]~
-[[MoinMoin:http://moin.sourceforge.net/]]~
pukiwikiほど有名じゃないけど、~
Pythonで書かれたWikiEnginesの一つです。~
Pythonで書かれたWikiEnginesの一つです。

-[[Mailman>http://www.list.org/]]~
-[[Mailman:http://www.list.org/]]~
結構有名なのだけど、Pythonで書かれている~
ことはあまり知られていないメールサーバ~
ことはあまり知られていないメールサーバ

-[[pygame>http://www.pygame.org/]]~
Pythonでゲームを作るなら、コレは必須でしょう~
-[[pygame:http://www.pygame.org/]]~
Pythonでゲームを作るなら、コレは必須でしょう

-[[Guido van Rossum(Pythonの作者)のページ>http://www.python.org/~guido/]]~
オランダの方なので、名前の呼び方は、あちらの人にも論議の的?~
-[[py2exe:http://www.py2exe.org/]]~
PythonをインストールさせずにPythonをWinで動かす(3.0は未対応)

-[[Guido van Rossum(Pythonの作者)のページ:http://www.python.org/~guido/]]~
オランダの方なので、名前の呼び方は、あちらの人にも論議の的?

-(Zope関連は専用ページに移動しました)
-([[Zope]]関連は専用ページに移動しました)

*Pythonってどんな言語? [#ce57a20c]
**「プログラミング未経験の方」向けの説明 [#g8464e41]
Pythonは数あるプログラミング言語の中で、入門者に優しく、奥の深い言語です。Pythonだけではできないこともたくさんありますが、習得したPython言語が不要になる日はまずこないでしょう。~
なお、有名なマーフィーの法則に「教育用にも使えるものは、教育用にしか使えない」というものがありますが、このPython言語に関して言えば、その法則にはあてはまりません(実際、教育用としても実用としても使われているのですから)~
欠点といえば、実行速度の遅さと、日本での知名度の低さ、でしょうか。~
ともかく、「はじめてプログラミングを習ってみたい」なら、Pythonがお勧めです。
ともかく、「はじめてプログラミングを習ってみたい」なら、Pythonがお勧めです。~
&color(#f00){Googleで採用されていることが大々的に報じられ、和訳や日本人によるPythonの本が増えた結果、以前よりも知名度はやや上がりましたが、どうもまだ『専門家の使う難しい言語だ』と誤解されている方が多いようです。私論ではありますが、普通に使う分には、多分学校教育などで未だ利用されているBASICより数段簡単ではないかと思うのですが……};

**「他言語を経験された方」向けの説明 [#b3eb18a3]
Pythonは、プログラミングの概念をすでにある程度理解された方にとっては、ものの2、3時間で習得できるお手軽な言語です。もしかしたら、前言語には無かった新しい視点が得られるかもしれません。

-&color(#080){ソースコードの見通しの良さ(可読性)を最重要視};~
Pythonの言語仕様の全てはここから始まります。他人がソースを読んだり、自分の過去のソースを読んだ時に「見通しが良い」ことは、すなわち改良/再利用を促進するのみならず、教育/習熟用にも利用でき、さらに非プログラマにもアピールしやすく、その結果、ユーザを増やすことにもつながります。ソースコードを読む/読ませることに特化した言語というのが、Pythonの最大の特徴だと思われます。~
なお、この可読性に関しては、他の要素と矛盾することが多く、特に書きやすさ(記述性?)との矛盾は、「手軽で書きやすい言語」というスクリプト言語の特徴と思われる部分と相反するため、批判が多い特徴でもあります。

-&color(#008){C/C++言語に似た言語仕様};~
細部を見ていくと、C系言語のポリシーとはかなり異なるPythonですが、見かけ上はC系言語に近い文法構造/演算子/予約語を採用しています(特にC++に近い)。思想を言語仕様に反映させていまいちポピュラーにならなかった、Pythonの祖先であるABC言語の反省からこうなったものと思われますが、逆にC/C++言語系言語や、同じC系スクリプト言語であるPerlのユーザには違和感を与える結果になることもあるようです。
細部を見ていくと、C系言語のポリシーとはかなり異なるPythonですが、見かけ上はC系言語に近い文法構造/演算子/予約語を採用しています(特にC++に近い)。思想を言語仕様に反映させていまいちポピュラーにならなかった、Pythonの祖先であるABC言語の反省からこうなったものと思われますが、下手に似ているが故に、逆にC/C++言語系言語や、同じC系スクリプト言語であるPerlのユーザにはかえって違和感を与える結果になることもあるようです。

-&color(#008){インデントブロック(非フリーフォーマット)};~
C系言語の「当然の特徴」の一つが、インデント(字下げ)や改行などを読みやすい形に自由にデザインできる「&color(#080){フリーフォーマット};」なのですが、Pythonでは{}(ブレース括弧)ではなくインデントの深さによってブロック構造を表現するため、&color(#f00){フリーフォーマットではなくなって};しまいました。~
これは、ABC言語から受け継いだ重要な仕様ですが、その意図は最初に述べた「可読性」重視によるものです。しかし、特にクラッシックな非フリーフォーマット言語を経験してきている方々には、非フリーフォーマットというだけでなんだか「古臭くて使いにくい」という印象を与え、敬遠される結果になっているようです。実際に使い始めた人は、あまり気にならなくなるようですが、それでも、AWKで流行った「一行野郎」(コンソールに一行で入力できるスクリプト)で、あまり凝ったことが出来なくなったのは事実で、スマートさをモットーとするパワースクリプターにはやや不人気のようです。

-&color(#008){文(statement)ベースの構文};~
多分プログラマに、フリーフォーマットより不人気であろう特徴は、この「文ベース」の構文でしょう。「式(expression)」をベースにしたC言語系プログラミングテクニックがほぼ壊滅的に使用不能になることは、その道で職人芸を発揮してきたプログラマ(C,C++,Perl,AWK,ICONなど)にとってはあまり面白いことでは無いでしょう。式ベースにすることによる可読性の低下防止と思われますが、好みの分かれるところでしょう。

-&color(#008){型チェックのゆるやかな言語};~
Pythonには厳密には代入という概念は存在せず、全て名付け(Assignment)となっているため、変数型チェックの必要がありません。~
そのため、一般のスクリプト言語やSmalltalk系オブジェクト指向言語と同じく、Pythonのオブジェクト型に対するチェックは(特にチェックルーチンを設けなければ)ありません。よって、多態性を実現するためにインターフェイスを独自に定義する必要はありません。~
別段際立った特徴ではないのですが、クラス定義や使用方法などがC++やJavaに似ているため、違和感を覚える人があるようです。

-&color(#008){オブジェクト指向思想にこだわらないOOP言語};~
Pythonは最初からオブジェクト指向プログラミング言語(Object Oriented Programing Langage)として設計されていますが、オブジェクトは「オプションだ」と言い切られているように、オブジェクトを意識せずとも十分プログラミングは可能です。ただし、ver.1.6以降(実際はPython ver.2.x系のための改変なので、以後Python2と記述します)大幅な言語仕様の見直しが行われ、以前はオブジェクトでなかった数値などもオブジェクトとして再設計されたため、「完全なオブジェクト指向言語」になりつつあります。しかし、オブジェクトを意識せずともプログラミングできる基本は全く変わっていません。~
※ver.3に向けて、型/クラスといった概念が整理され、propertyなどのオブジェクト指向プログラミング用のツールが少しずつ出揃ってきています。
Pythonは最初からオブジェクト指向プログラミング言語(Object Oriented Programing Langage)の機能を組み込んだプログラミング言語として設計されていますが、オブジェクトは「オプションだ」と言い切られているように、オブジェクトを意識せずとも十分プログラミングは可能です(手続き型言語をベースとした、マルチパラダイム言語という区分が一番しっくりくるようです)ただし、ver.1.6以降(実際はPython ver.2.x系のための改変なので、以後Python2と記述します)大幅な言語仕様の見直しが行われ、以前はオブジェクトでなかった数値などもオブジェクトとして再設計されたため、「完全なオブジェクト指向言語」になりつつあります。しかし、オブジェクトを意識せずともプログラミングできる基本は全く変わっていません。~
'''&color(red){New!};'''Python3では、旧式クラスを廃し、object型を継承する新式クラスのみに限定(ただしobject型からの継承は省略可能)

-&color(#080){少ない文法、多彩なデータ型};~
Perlの多彩な文法は魅力的で、クールなショートカットスクリプトを書くには非常に便利ですが、Pythonではあえてその魅力的な部分を捨てて、単純な文法構造に徹しています(理由はやはり可読性)~
その代わり、ICONから譲り受けた多彩な組み込みデータ型や演算子が使用できます。Javaでは敬遠された演算子のオーバーロードは、C++式ではなく、Smalltalk式のメソッドフック実装という形でオブジェクト毎に設定できますので、シンプルな記述が可能となります(Javaの思想ではこの「演算子のオーバーロード」は「可読性の低下・難解・使用率の低さ」ゆえに忌避されているようですが、ほとんどのパッケージソースが閲覧可能なPythonでは、事実上あまり問題になっていないようです。とはいえ、パブリックなモジュールには、必要以上には使われていないのも事実ですが・・・)。なお、Python2では、組み込みデータ型の継承による拡張が可能となりましたので、データ型利用の自由度はさらに上がりました。

-&color(#080){比類なき手軽なモジュール};~
プログラミング言語において、プログラムを分割するモジュールを自作することは、ある程度高度な知識を必要とするのが通常です。しかし、Pythonでは自作のモジュールも扱いも信じられないくらい簡単です(Modula-3式だそうです)。スクリプトファイルを作れば、特別なことをせずともそれはモジュールとして扱えます。呼び出し側でimportすると、そこに書いてあることが普通に実行されるだけです。関数やクラスをいっぱい作って「自分のPython」にじゃんじゃんカスタマイズできます。覚えることは名前空間に関する簡単なルールだけ。他言語でモジュールにしりごみしている人でも、Pythonでは楽しくモジュールとつきあえます。

-&color(#f00){遅い実行速度};~
「改善されている」「マシンパワーが全体的に上がっているのでさして問題にならない」「生産効率のほうが重要だ」などといわれていますが、本質的に「人間に読みやすい、書きやすい」言語を目指したため、どうしてもコンパイラ言語のみならず、他のスクリプト言語や、下手すると実行コンパイルさえしない優秀なインタープリタ言語(PHPなど)よりもさらに遅かったりします。改善されているのは事実ですが、やはり他言語と比較して早くなることは、これからもまず無いでしょう。

-&color(#080){少ない組み込み関数/豊富なライブラリモジュール};~
Python言語仕様とは少し異なりますが、ライブラリモジュールをインポートせずに使えるPythonの機能はごくわずかです。Cほど極端ではありませんが、例えば実行時の引数を調べることすら、sysというモジュールをインポートしないと使えません。さらに内訳をバラすなら、sysは「組み込みモジュール」として、処理系のコアと不可分に組み込まれているのに、わざわざ呼び出しが必要なのです。そもそも、「組み込みモジュール」なんて不思議なもの、他の言語にあるでしょうか?(標準、じゃないですよ)。これは、キーワードや組み込み関数を極力減らし、名前空間の衝突によるトラブルを回避した結果なのですが、他言語の経験者にはいかにも奇異に見えるかもしれません(いや、C経験者にはわかるかな?・・・でも、「組み込みモジュール」は理解不可能だろうなぁ・・・)
Python言語仕様とは少し異なりますが、ライブラリモジュールをインポートせずに使えるPythonの機能はごくわずかです。Cほど極端ではありませんが、例えば実行時の引数を調べることすら、sysというモジュールをインポートしないと使えません。さらに内訳をバラすなら、sysは「組み込みモジュール」として、処理系のコアと不可分に組み込まれているのに、わざわざ呼び出しが必要なのです。そもそも、「組み込みモジュール」なんて不思議なもの、他の言語にあるでしょうか?(標準、じゃないですよ)。これは、キーワードや組み込み関数を極力減らし、名前空間の衝突によるトラブルを回避した結果なのですが、他言語の経験者にはいかにも奇異に見えるかもしれません

-&color(#080){ロング整数(多倍数整数)サポート};~
メモリの限り無限桁数を扱えるロング整数が、コアとしてサポートされています。その関係か、科学計算関連でPythonを使用される方は多いようです。
ver.2.4において、ロング整数は通常の整数とシームレスに変換されるようになりました。
-&color(#080){ロング整数(多倍長整数)サポート};~
メモリの限り無限桁数を扱えるロング整数が、コアとしてサポートされています。その関係か、科学計算関連でPythonを使用される方は多いようです。ver.2.4において、ロング整数は通常の整数とシームレスに変換されるようになりました。~
'''&color(red){New!};'''Python3では、ロング整数という概念が無くなり、整数のメモリモデルは内部で自動的に処理されます。ゆえに表面上は限りなく大きな整数を扱えるといったイメージになります)

-&color(#080){例外検出用文法のサポート};~
例外を捕らえる文法が、基本文法として取り入れられています。例外は組み込み例外以外にも自由に設定できるので、エラー検出以外にもプログラムに積極的に利用できます。例えばPythonではジャンプ構文が全面的に撤廃されていますので、多重ループから抜けるために例外文法を利用することなどが可能です。

-&color(#f00){日本語問題};~
現在、PyJUGの日本語環境をインストールすれば、UTF-8系Unicodeについては問題なく使えるのですが、S-JISとなると、内部でコード変換する必要がでてくるなど、やや面倒な処理が必要となります(Pythonはテキストだけでなくバイナリファイルも普通に処理できるので、フィルタなどはそちらで行うこともできますが、GUIを使うためにはコード変換が必須です)~
※次期Python(2.4)より、本家の実装が日本語(及び、韓国語/中国語)をサポートするそうです。アジアにPythonが認知された結果なのか、あるいは本家Pythonコミュニティーがアジアの存在を認知したのか、いずれにせよ喜ばしいことです☆
-&color(#080){日本語の扱い};~
旧バージョンのPythonでは、一部日本語の扱いが難しいものもありますが、最新のPython3系では、安心して日本語が扱えます。

-&color(#008){明示的なselfポインタ};~
Pythonにはメソッドの外のクラスフィールド/インスタンスフィールドに対して暗示的にアクセスすることはできません。そのため、C++のthisやSmalltalkのselfにあたるポインタを「自分で設定し」「そこからアクセスする」必要があります。メソッドの第一引数は必ず所属オブジェクトのselfポインタになります。
Pythonにはメソッドの外のクラスフィールド/インスタンスフィールドに対して暗示的にアクセスすることはできません。そのため、C++のthisやSmalltalkのselfにあたるポインタを「自分で設定し」「そこからアクセスする」必要があります。メソッドの第一引数は必ず所属オブジェクトのselfポインタになります

-&color(#080){強力なモジュール機能};~
ライブラリモジュールが充実していることはすでに述べましたが、自分でモジュールを作成することもPythonでは容易です。import文でパスの通った場所のファイル名を指定してやれば、そのファイルは指定された名前空間に導入されます。モジュールの作り方には何の制限もなく、ただ、ファイルの拡張子を.pyにすれば良いだけです。このことによって、プログラムのモジュール化や再利用が促進され、コーディングのコストが大幅に削減されます。また、モジュールをパッケージ化したり、モジュールの中から特定のオブジェクトのみをインポートしたり、さらにはモジュール導入の際にモジュール名とは別の名前空間で登録できたりします。~
なおこの特徴は、Pascal系言語のModula-2から導入したそうです。Javaのモジュール/パッケージインポートに似ていますが、モジュールから手軽にオブジェクトを利用できるJavaと、あくまで名前空間の衝突を避けようとするPythonは実際にははっきりと異なりますので、両方を使うプログラマは注意が必要です。
なおこの特徴は、Modula-3という言語から導入したそうです。Javaのモジュール/パッケージインポートに似ていますが、モジュールから手軽にオブジェクトを利用できるJavaと、あくまで名前空間の衝突を避けようとするPythonは実際にははっきりと異なりますので、両方を使うプログラマは注意が必要です。

-&color(#f00){かっこが外せない?};~
AWK,Perl,Rubyなどでは、関数の後ろの括弧が、見かけ上明白な場合は括弧がはずせますが、Pythonでは外せません。これは、関数もすべてオブジェクトなので、括弧が無い場合、関数の適用ではなく、関数オブジェクトへの参照とみなされます。関数をオブジェクトとして扱うのが頻繁になるとこの特徴は非常に便利なのですが、普通はわずらわしいと思われる方も多いようです。これはPythonの思想を反映した仕様ですので、あきらめてください。~
※2005.04.01に、Pythonを作ったGuido van Rossumによって、さらに厳格な書式が求められるようです。例えば、=の前後は空白を「入れなければならない」、()の前後の空白は「入れてはならない」、return文の式に不要な()は「つけてはならない」など。まぁ、確かにこれで「綺麗な書式」は守られますが、Pythonを敬遠する人は若干増えるかも。
AWK,Perl,Rubyなどでは、関数の後ろの括弧が、見かけ上明白な場合は括弧がはずせますが、Pythonでは外せません。Pythonでは関数もすべてオブジェクトなので、括弧が無い場合、関数の適用ではなく、関数オブジェクトへの参照とみなされます(詳しくは[[ここがヘンだよPythonista>ここがヘンだよPythonista]]を参照してください)

**「マニアを自認する方」向け [#ee494251]

ここでは、Pythonという言語をある程度見聞きして知っている方について、ややコアなPythonの話題を掲げます。
 ここでは、Pythonという言語をある程度見聞きして知っている方について、ややコアなPythonの話題を掲げます。

※注意:この項目の特徴に関しては、使用の際、十分注意が必要です。さらに、この項目に挙げられた特徴を使用せずとも、通常のプログラミングにはほとんど支障がありません。

-関数型プログラミングをサポート~
関数はキーワードではなくオブジェクト(ポインタ)として登録されます。そのため、変数やリストに代入(実際はassignment)して処理することも可能です。その結果、C++のようにクラス定義の外でメソッド定義することも可能です。また、関数として呼び出せるクラスインスタンスを定義することも可能です。~
 Schemeのように、Pythonでは関数はオブジェクトとして扱われます。そのため、高階関数に普通の引数のように直接引き渡す事も可能です。

-メタクラスプロトコル~
最初から装備されていたらしいですが、便利に使えるようになったのは、2.1以降です。クラスのクラスであるtypeを使って、動的にクラスを作るなどの操作が可能です。
 Pythonでは、メタクラスを駆使するための文法も完備しています。typeクラスを継承して独自のカスタムメタクラスも作成できます。Python3では書式も整理され、すっきりと見やすくなりました。

-レキシカルスコープとクロージャの実装~
関数の入れ子を作ると、入れ子の深度とスコープルールが一致するレキシカルスコープルールが、Python2ではより明確になりました。このため、クロージャの実装がより手軽になりました(多分・・・)
 関数の入れ子を作ると、入れ子の深度とスコープルールが一致するレキシカルスコープルールが、Python2ではより明確になりました。このため、クロージャの実装がより手軽になりました。~
'''&color(red){New!};'''Python3ではさらに、予約語'''nonlocal'''の登場によって、レキシカル変数の使用がさらに便利になりました。

-イテレータ/ジェネレータ~
Python2で導入されたyieldキーワードによって、クラスによるオブジェクト定義を行わずとも手軽にイテレータ/ジェネレータを作成できるようになりました。~
ver.2.4では、関数を用いずにジェネレータを定義する構文が追加されました。
 Python2で導入されたyieldキーワードによって、クラスによるオブジェクト定義を行わずとも手軽にイテレータ/ジェネレータを作成できるようになりました。~
 ver.2.4では、関数を用いずにジェネレータを定義する構文が追加されました。~
 Python3ではメモリの効率化のため、リストを返していた組み込み関数やメソッドの多くが、イテレータオブジェクトを返すように変更されました。

-フィールド代入制限機構~
Pythonでは、メソッドやフィールドの書き換えについて、ほとんど何の制限もありませんが、誤ってそういったものを書き換えないための保護策は、__setattr__組み込みメソッドによって実現されています。ただし「悪意ある」書き換えを保護する機能は、存在しません。~
現在、新しいオブジェクトスタイルが試験的に導入されています。将来的にはオブジェクトの構造や構成が新しいスタイルに移行する予定です。
 Pythonでは、メソッドやフィールドの書き換えについて、ほとんど何の制限もありませんが、誤ってそういったものを書き換えないための保護策は、__setattr__組み込みメソッドによって実現されています。ただし「悪意ある」書き換えを保護する機能は、存在しません。~
 現在、Python3で新式オブジェクトスタイルが本格的に導入されていて、セキュリティ関連のコードもかなり書きやすくなりましたが、相変わらず「間違い」には対処できても「悪意」に対処するつもりは無いようです

**Rubyユーザの方へ [#qc774dbe]
**使用上の注意 [#p52ab4dd]

「[[オブジェクト指向スクリプト言語Ruby:http://www.amazon.co.jp/gp/product/4756132545/503-0298929-2919972?v=glance&n=465392]]」に書かれている項目のうち、「文字列などの基本データ型はインスタンスではない」「本物のガーベージコレクタは無い」の2項目は消しておいて下さい。
-スタック・フローオーバーに注意~
 Pythonは比較的大きなメモリ空間を使用することができますが、スタックには限界があります。特に末尾再帰を最適化してgotoループにするような器用なことはしてくれません。たとえばこの、再帰を用いた階乗計算の式ですが……

現在(ver.2.2以降)Pythonの全てのデータは文字通りオブジェクト(インスタンス)であり、そのクラスを拡張することも、インスタンスから参照することも可能です(当たり前ですが、これはCで実装されていますので、Cコードで拡張クラスも書ける筈ですが、未確認です)。
 fact = lambda n m=1:m if n==0 else fact(n-1, m*n)

[同書の著者で Ruby の設計者でもある まつもと氏が[[日記:http://www.rubyist.net/~matz/20050114.html#p03]]で同種の誤認識の修正に興味を持たれているようですから、この機に一気にたたみかけてはいかがでしょう?>Python ユーザーのかた --sumim]
 この例では、大体1,000回程度でフローオーバーしてしまいます。この場合は、reduce(functools.reduce)を使用するか、素直にforループなどを使用しましょう。

[理解さえしてもらえれば、良いと思います。依然として他の部分の特徴はかなり違いますし。--機械伯爵]
 import functools
 fact2 = lambda n: functools.reduce((lambda x, y: x * y),range(1, n+1))

あとは実行速度ですが、これは多分今でもRubyより遅いでしょう・・・(Pythonにも色々秘密兵器がありますが、まぁそれはおいといて)。
 def fact3(n):
   k = 1
   for x in range(1,n+1):
     k *= x
   return k

処理系の遅さについては、Perlの項では「なんとかなる」とご本人もおっしゃてることですし☆ 
 どちらでも、10,000を指定してもスタックフローオーバーにはなりません。

さらにいえば、前述のとおりイテレータも完備されておりますし(当時はRubyにあってPythonにはなかった)お望みならLispっぽくlambdaも使えます。
*Python3(Python 3000, py3k) [#ace23e13]

よりPerlっぽく書く(ダイレクトに正規表現やヒヤドキュメントを書くような)ならやはりRubyですが、特にPerlに思い入れもなく、SmalltalkよりC++のファジーなオブジェクト指向が好みならば、Pythonのほうがおすすめです(主観ですが(笑))
最初はGuidoの夢想から始まったらしいPython3000の実現! Python3系が登場しました。現在豊富な資産を持つPython2派と、未来志向Python3派の地味な戦いが激化?

(RubyはLispっぽく、PythonはHaskellっぽいそうな。外見だけかもしれないけど)
-[[The Next Millennium of Python World!>Python3000]]……次世代実装Python3(Python 3000)の世界へようこそ!

**Pythonのオブジェクト的メタファ [#v2bba5bb]
-[[What's New In Python 3.0の和訳>What'sNewInPython3.0]]……Python3の新機能の紹介(公式版)の翻訳

完全なオブジェクト指向言語であるSmalltalk(Squeakなど参照)から見ると、Pythonのオブジェクトというのは、かなり珍妙に見えるかもしれない。
-[[Pythonの文法]]……[[TSNETスクリプト通信第8号]]より掲載の「Python3の文法」のサポートページ

>object message
*その他のサイト内Python関連ページ [#f80c8f19]

と書くとき、Smalltalkでは、messageという単項メッセージをobjectに送った、という話だけで済む。
-[[ここがヘンだよPythonista]]……Pythonの哲学?
-[[Zope]]……人気Webアプリケーションサーバー
-[[Pythonレシピ]]……Pythonレシピへのリンク
-[[Pythonライブラリ]]……Pythonライブラリのリンク

ところが、Pythonで同様に

>object.method()

と書くと、話は非常にややこしくなる。まず、二通りの考え方が生まれる。

>'object.method'を一つの名前とし、このオブジェクトに()という単項メッセージを送る。

>'object'というオブジェクトに引数methodの二項メッセージ'.'を送り、その返り値である'object.method'に単項メッセージ()を送る。

つまり、methodがあくまでメッセージ(演算子)でなくオブジェクト(値)であることが、Pythonの解釈をややこしくしている。

*Python3000(py3k)

最初はGuidoの夢想から始まったらしいPython3000。ついに、Python3.0a1として、姿を現しました。はっきり云ってまだバグがとんでもなく多く(IDLEなどは起動不能)、使えたレベルではありませんが、下位互換をすっぱりと犠牲にして整理された文法は、非常に気持ちがよいのです。詳細が分かり次第、レポートします(別項、鋭意製作中)

*おまけ [#l5259eba]

-LispとPythonのビミョーな関係・・・[[Lisp vs Python>LispVsPython]]
-[[LispとPythonのビミョーな関係]]……別名Paul Grahamファンページ?

-Pythonのヘンなトコロ(ページ作成予定)
#comment_nospam

#comment