初めてのPython(26章後編)

スタティックメソッドとクラスメソッド 2.2でstaticmethod, classmethodというビルドインオブジェクトが追加され、 呼び出しにインスタンスを必要としないスタティックメソッド、クラスメソッドが定義できる。 定義可能なメソッドは以下の3種類 インスタン…

初めてのPython(26章中編)

__getattr__ / __setattr__ / __getattribute__ __getattr__は、オブジェクトツリーに存在しない属性へのアクセスがあった時だけ呼び出される。 __setattr__は、オブジェクトツリーに存在するしない関わらず呼び出される。 [kobakoba0723@fedora13-intel64 ~…

UnicodeEncodeError

XMLを解析したい用事が出来たので、折角だからPythonでやってみたところ、 日本語を含むXMLだったのでUnicodeEncodeErrorが出てしまった。。。 「Unicode文字列って何?」状態だったので、やったことを忘れないようにメモメモ。 XMLパーサー 代表的なパーサ…

初めてのPython(26章前編)

属性検索順制御 スーパークラスとして、ビルドインオブジェクト/objectを指定したクラスのインスタンスでは、 属性の検索が幅優先で行われる。 それだと困る(深さ優先にして欲しい)場合は、優先したい属性をクラスの中で明示的に指定する。 [kobakoba0723@fe…

初めてのPython(25章後編)

getattr(X, N) Xに所属するNという属性を返す関数。 X.Nとの違いは、getattrではNに”文字列を返す式"を使うこと。 文字列を返す式の1つがNに変数を渡すことX.__dict__[N]との違いは、getattrでは上位クラスの属性の検索が行われること。 [kobakoba0723@fedo…

初めてのPython(25章前編)

IS-A関係, HAS-A関係 A is a Bから来ているのがIS-A関係。 「AはBの一種」なので、Aの中でさらに何かに特化したのがB。A has a Bから来ているのがHAS-A関係。 「AはBを含んでいる」なので、AはBの構成要素。参考:オブジェクト思考 is-a関係とhas-a関係:継承…

初めてのPython(24章後編)

名前空間 = ディクショナリ サブクラスにスーパークラスの属性が継承される時に起こるのは「ディクショナリのリンク」 [kobakoba0723@fedora13-intel64 ~]$ cat namespace.py #!/usr/bin/env python class C1(object): c1_data = 1 def __init__(self, value…

初めてのPython(24章中編)

演算子のオーバーロード __getitem__ と __iter__ どちらも反復処理を実現させるのに使う。 __getitemm__はインデクシング処理に対応するフックメソッド*1 __iter__はイテレータプロトコルに対応するフックメソッド 反復処理には次のようなものが該当する。 …

初めてのPython(24章前編)

class ステートメント def ステートメントと同じような動き 該当モジュールが読み込まれた時に実行される クラス名に指定したクラスオブジェクトを生成し、クラス名の変数に代入する クラスは名前空間として考えられる クラスのなかで代入された変数はクラス…

初めてのPython(23章)

Pythonのクラスの特徴 名前空間の1つ 名前空間の継承(階層化)、演算子のオーバーロードが出来る クラスオブジェクトとインスタンスオブジェクト class ステートメントは、def ステートメントと同様に、初回インポート時に初めて実行される クラス変数はクラ…

初めてのPython(22章)

クラスとインスタンス クラスはインスタンスを作るためのひな形。 クラスを作成(定義)するには class ステートメントを使い、インスタンスを作成するにはクラスを呼び出す。 インスタンスの属性検索は以下のようにして行われる 下から上に(サブクラスの属性…

初めてのPython(21章)

モジュールのカプセル化 Pythonではカプセル化は出来ない。 アンダースコア(_)を使うことで、データを隠蔽することは出来るPEP8。 1個の場合、from ~ import * でインポートできないようになる 2個の場合、モジュール(クラス無し)の時は1個の時と同じ動き…

初めてのPython(20章)

インポート方法は2種類 モジュールファイルを指定 モジュールが格納されているディレクトリパスを指定 ディレクトリパスを指定する方法をパッケージインポートと呼び、指定されるディレクトリのことをパッケージと呼ぶ。パッケージインポートの場合、【ディ…

初めてのPython(19章)

モジュール トップレベルの変数は、モジュールの属性となる。 また、モジュール名は、プログラム中では変数として扱われるので、予約語は使えない。 importステートメントとfromステートメント importはモジュール全体をインポートするのに対して、fromはモ…

初めてのPython(18章)

4部ではモジュールについて。モジュールは、プログラムのコードやデータの集合のことを指し、インポート操作によって他モジュールで定義されている属性を利用できる。 モジュールの操作には以下のようなステートメント、ビルドイン関数を使う import ステー…

初めてのPython(17章)

lambda式、map関数、リスト内包表記、ジェネレータについて lambda式 無名関数と呼ばれるように名前の無い関数を作成する。実行されると関数が作成され、作成された関数が式の戻り値になる。 作成された関数が自動的に同名の変数に代入されるのがdefステート…

初めてのPython(16章)

変数のスコープと関数の引数について 変数のスコープ Pythonの変数はすべていずれかの名前空間に属する、モジュール全体であったり、関数であったり。 プログラムで変数を利用すると以下のどちらかが行われる。 名前空間に新たな変数を作成する すでに名前空…

初めてのPython(15章)

4部は、3部でやったステートメントを組み合わせてひとまとまりの処理をさせる関数について。 関数についての基礎 Pythonではあらゆるものがオブジェクトなので、関数も定義すると関数オブジェクトが作成される。 作成された関数オブジェクトは定義した関数名…

初めてのPython(14章)

Pythonのドキュメントについて ドキュメントの種類と表示方法 ドキュメントは、コードの内容と一致させるように努める。 種類 内容 #を使ったコメント プログラムの中に組み込む docstring(__doc__) プログラムの中に組み込む、help関数などで中身を見れる …

初めてのPython(13章)

ループ処理のwhileステートメントとforステートメント whileステートメント Pythonのwhileではelseブロックを使うことが出来る。 このブロックはループが終了する時に実行される。(条件判定式がfalseと評価された時に実行される) breakでループを抜けた場合…

初めてのPython(11章)

代入、出力を行うステートメント 代入ステートメント 『=』の左側(代入先)に「変数」または「オブジェクトの構成要素」、右側(代入対象)に「オブジェクト」を書くことで 代入対象に向かうリファレンスを代入先に作成することが出来る。代入には、 基本形 シ…

初めてのPython(10章)

2部ではビルドインオブジェクトのことをやり、3部ではステートメントについて Pythonプログラムの構造 4章でもやってたけど、忘れてるので覚えるためにも。 3部でやるステートメントの並べ方でプログラムのロジックが決まる。 プログラムはモジュールから…

初めてのPython(12章)

条件分岐のifステートメント 構文、多分岐 if ~ elif ~ elseを使う。else ifじゃないので注意が必要。 if <条件1>: 処理1 elif <条件2>: 処理2 else: 処理3多分岐(switch)に該当するステートメントは存在しないので、elifをいっぱい並べて実現。 条件判定が…

初めてのPython(9章後半)

ビルドインオブジェクトの分類 型 カテゴリ 変更性 数値 数値 immutable 文字列 シーケンス immutable リスト シーケンス mutable ディクショナリ 写像 mutable タプル シーケンス immutable ファイル エクステンション immutable 集合 集合 immutable リフ…

初めてのPython(9章前半)

タプルは『オブジェクトの集合』で、あらゆるオブジェクトにネスト出来る。 ファイルはコンピュータ上のファイルへのインタフェース。タプルとは? immutableなシーケンスの一種 タプルを対象にした変更処理は出来ない 変更が必要な時は新しいオブジェクトを…

初めてのPython(7章)

文字列は、immutableなシーケンスの一種文字列の種類は シングル or ダブルクォート トリプルクォート raw文字列 unicode文字列 文字列を整形する方法は 文字列の連結 文字列フォーマット 文字列オブジェクトでよく使うメソッド 置換(replace) 分割(split) …

初めてのPython(8章)

リストとディクショナリは『オブジェクトの集合』で、あらゆるオブジェクトを無限にネスト出来る。リストとは? mutableなシーケンスの一種 処理結果はオブジェクト自身を変更する(返り値として新しいオブジェクトは出来ない) 例外的に連結操作の場合は新し…

初めてのPython(6章)

Pythonプログラミングにおいて重要なことに「型付けがダイナミック」ということがある。この特性のおかげで 宣言なしで変数を使える 型の違うオブジェクトを同じ変数に代入できる ダイナミックな型付けは以下のようにして実現される 変数はオブジェクトへの…

初めてのPython(5章)

オブジェクトの操作には式を使う。 式はオブジェクトと演算子から構成され、オブジェクト毎に使える演算子が決まっていて、同じ演算子でもオブジェクトが違えば意味が異なる(ポリモーフィズム)。 これは、オブジェクト毎に定義が異なっているからで、オーバ…

初めてのPython(4章)

Pythonプログラムの構造は プログラムはモジュールから構成される モジュールはステートメントから構成される ステートメントは式から構成される 式により、オブジェクトは生成・処理される Pythonプログラムにおける演算の対象は全てオブジェクト その種類…