今までPython以外の言語を使ってきたひとが、「アレってPythonでどう書くんだろう?」と悩んだときに、そっと参照するチートシートを作ろうと思いました。普段まめに勉強してこなかったひとが、テスト前に一夜漬けで作るやつ第一弾です。続きがあるかはわかりません。
環境はPython 3.9です。
自分はPythonをほとんど使ったことがないので、大ポカ書いていたらそっとマサカリください。
ファイル名
全部小文字にします。
myclass.py
ハイフンやアンダースコアは使わない……?
クラス名
大文字始まりのキャメルケースで書きます。
class MyClass:
pass
メソッド名
スネークケースで書きます。
class MyClass:
def my_method(self):
pass
クラスコメント/メソッドコメント
クラス/メソッド定義の後に、"""
で囲んで書きます。
複数行も書けます。
class MyClass:
""" 私のかわいいクラス """
def my_method(self):
"""
私のメソッド
俺のメソッド
"""
継承
クラス宣言の後ろにかっこでくくって書きます。
多重継承もできます。
class MyClass(MyBase1, MyBase2):
pass
コンストラクタ 初期化メソッド
__init__
メソッドを定義します。
class MyClass:
def __init__(self):
""" コンストラクタではなく、初期化メソッド selfを忘れない """
pass
インスタンスを生成する真のコンストラクタは__new__
メソッドでした。
https://docs.python.org/ja/3/reference/datamodel.html#basic-customization
@shiracamus さんありがとうございます。
抽象メソッド/インターフェース
ABC
を継承します。
ABCは、Abstract Base Classの略です。
@abstractmethod
デコレータを付けます。
from abc import ABC
class MyAbstractClass(ABC):
@abstractmethod
def must_implement(self):
pass
アクセス修飾子
privateとかpublicみたいな、そのものずばりのものはありません。
privateなメンバーは、先頭に__
を付けます。派生クラスで上書きできなくなります。
class MyClass:
def __my_private_method(self):
pass
普通には見えなくなるだけで、このようにするとアクセスできるそうです。
instance = MyClass()
instance._MyClass__my_private_method()
setter/getter あるいは書き込み専用プロパティ/読み取り専用プロパティ
getterは@property
デコレータをつけます。setterは@プロパティ名.setter
デコレータをつけます。
class MyClass:
def __init__(self):
self.__x = 1
@property
def x(self):
return self.__x
@x.setter
def x(self, value):
self.__x = value
void
None
になります。
def my_func() -> None:
pass
三項演算子
1行のifで書きます。
s = '偶数' if x % 2 == 0 else '奇数'