LoginSignup
4
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-10

こちらで基本的なところは抑えましたので(たぶんw)、次のステップとしてクラスに取り組んでみたいと思います。

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

基本

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

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__ コンテキストマネージャで実行コンテキスト終了時に呼び出される

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

4
10
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10