C/C++プログラマがPythonにチャレンジしてみる（クラス編）

[こちら](http://qiita.com/mine820/items/a9bb051ef8fb75e813b0)で基本的なところは抑えましたので（たぶんｗ）、次のステップとしてクラスに取り組んでみたいと思います。

※参考書の「6章」になります
※やはり、あまり重要そうではなさそうなところは飛ばしていきます

#基本

- 宣言は「class Hoge:」
- 継承は「class Hoge(Base1, Base2):」
- メソッドは関数と同じ「def func(self, ...):」
    - とにかくメソッドの最初の引数は「self」
- コンストラクタは「def \_\_init\_\_(self, ...):」
- クラス変数も定義できる（Java的な書き方で）
    - 他にも「\_\_init\_\_()」内で設定すれば、想定の動作になる
    - オブジェクトに、どんどん変数を追加できる（宣言しないのは、なんか違和感ｗ）
    - 変数に値を設定しないと、その変数は存在しないのと同じ

#Tips

- プライベート関数（変数）は「\_func()」と、前にアンダースコアを付け、後ろはアンダースコアを無しにする
- staticメソッドは「`@staticmethod`」で定義
    - 第1引数に「self」はいらない

#その他

もっといろいろ機能はあるようだが、とりあえず覚えなくても何とかなりそう。
必要になったらちゃんと見ます。

| メソッド名 | 意味 |
|:--|:--|
| \_\_init\_\_ | コンストラクタ |
| \_\_del\_\_ | デストラクタ |
| \_\_new\_\_ | インスタンスアロケータ |
| \_\_repr\_\_ | オブジェクトの情報を表す文字列を返す |
| \_\_str\_\_ | オブジェクトを文字列に変換して返す |
| \_\_bytes\_\_ | オブジェクトをbytes型に変換して返す |
| \_\_format\_\_ | オブジェクトを書式に従った文字列にして返す |
| \_\_hash\_\_ | オブジェクトのハッシュ値を返す |
| \_\_bool\_\_ | ブール演算時に呼び出される |
| \_\_lt\_\_ | 「<」演算に対応 |
| \_\_le\_\_ | 「<=」演算に対応 |
| \_\_eq\_\_ | 「==」演算に対応 |
| \_\_ne\_\_ | 「!=」演算に対応 |
| \_\_gt\_\_ | 「>」演算に対応 |
| \_\_ge\_\_ | 「>=」演算に対応 |
| \_\_getattr\_\_ | オブジェクトに設定されていない属性値を読み出すときに呼び出される（登録されているとき以外） |
| \_\_getattribute\_\_ | オブジェクトに設定されていない属性値を読み出すときに呼び出される（常に） |
| \_\_setattr\_\_ | オブジェクトの属性値を設定するときに呼び出される |
| \_\_delattr\_\_ | オブジェクトの属性値を削除するときに呼び出される |
| \_\_dir\_\_ | メンバの一覧のシーケンスを返す |
| \_\_index\_\_ | 整数の値を返す |
| \_\_add\_\_ | 「+」演算子（左項）に対応 |
| \_\_sub\_\_ | 「-」演算子（左項）に対応 |
| \_\_mul\_\_ | 「*」演算子（左項）に対応 |
| \_\_truediv\_\_ | 「/」演算子（左項）に対応 |
| \_\_floordiv\_\_ | 「//」演算子（左項）に対応 |
| \_\_mod\_\_ | 「%」演算子（左項）に対応 |
| \_\_divmod\_\_ | 「divmod()」演算子（左項）に対応 |
| \_\_pow\_\_ | 「**」演算子（左項）に対応 |
| \_\_lshift\_\_ | 「<<」演算子（左項）に対応 |
| \_\_rshift\_\_ | 「>>」演算子（左項）に対応 |
| \_\_and\_\_ | 「&」演算子（左項）に対応 |
| \_\_xor\_\_ | 「^」演算子（左項）に対応 |
| \_\_or\_\_ | 「｜」演算子（左項）に対応 |
| \_\_radd\_\_ | 「+」演算子（右項）に対応 |
| \_\_rsub\_\_ | 「-」演算子（右項）に対応 |
| \_\_rmul\_\_ | 「*」演算子（右項）に対応 |
| \_\_rtruediv\_\_ | 「/」演算子（右項）に対応 |
| \_\_rfloordiv\_\_ | 「//」演算子（右項）に対応 |
| \_\_rmod\_\_ | 「%」演算子（右項）に対応 |
| \_\_rdivmod\_\_ | 「divmod()」演算子（右項）に対応 |
| \_\_rpow\_\_ | 「**」演算子（右項）に対応 |
| \_\_rlshift\_\_ | 「<<」演算子（右項）に対応 |
| \_\_rrshift\_\_ | 「>>」演算子（右項）に対応 |
| \_\_rand\_\_ | 「&」演算子（右項）に対応 |
| \_\_rxor\_\_ | 「^」演算子（右項）に対応 |
| \_\_ror\_\_ | 「｜」演算子（右項）に対応 |
| \_\_iadd\_\_ | 「+=」累積代入文に対応 |
| \_\_isub\_\_ | 「-=」累積代入文に対応 |
| \_\_imul\_\_ | 「*=」累積代入文に対応 |
| \_\_itruediv\_\_ | 「/=」累積代入文に対応 |
| \_\_ifloordiv\_\_ | 「//=」累積代入文に対応 |
| \_\_imod\_\_ | 「%=」累積代入文に対応 |
| \_\_ipow\_\_ | 「**=」累積代入文に対応 |
| \_\_ilshift\_\_ | 「<<=」累積代入文に対応 |
| \_\_irshift\_\_ | 「>>=」累積代入文に対応 |
| \_\_iand\_\_ | 「&=」累積代入文に対応 |
| \_\_ixor\_\_ | 「^=」累積代入文に対応 |
| \_\_ior\_\_ | 「｜=」累積代入文に対応 |
| \_\_neg\_\_ | 「-」単項演算子に対応 |
| \_\_pos\_\_ | 「+」単項演算子に対応 |
| \_\_abs\_\_ | 「abs()」単項演算子に対応 |
| \_\_invert\_\_ | 「^」単項演算子に対応 |
| \_\_complex\_\_ | complex()に対応 |
| \_\_int\_\_ | int()に対応 |
| \_\_float\_\_ | float()に対応 |
| \_\_round\_\_ | round()に対応 |
| \_\_instancecheck\_\_ | クラスがサブクラスかサブクラスのインスタンスか仮想サブクラスのインスタンスか |
| \_\_subclasscheck\_\_ | クラスがサブクラスか仮想サブクラスか |
| \_\_call\_\_ | 「()」関数呼び出し演算子に対応 |
| \_\_len\_\_ | len()に対応 |
| \_\_getitem\_\_ | object[key]での取得に対応 |
| \_\_setitem\_\_ | object[key]にの設定に対応 |
| \_\_delitem\_\_ | del object[key]に対応 |
| \_\_iter\_\_ | イテレータの取得 |
| \_\_reversed\_\_ | reversed()に対応 |
| \_\_contains\_\_ | 「item in object」での取得に対応 |
| \_\_get\_\_ | ディスクリプタで属性値を取得 |
| \_\_set\_\_ | ディスクリプタで属性値を設定 |
| \_\_delete\_\_ | ディスクリプタで属性値を削除 |
| \_\_enter\_\_ | コンテキストマネージャでwith文で呼び出される |
| \_\_exit\_\_ | コンテキストマネージャで実行コンテキスト終了時に呼び出される |

※こんなの、覚えられるかっていうの（苦笑）