🐍

Pythonの省略の使い方 考察

2022/05/24に公開

※筆者はPython 3.7の環境です。

クラスで使用

Passの場合

例えば何もしないクラスを作成するとします。

class SampleClass:
    pass

このクラスは何もしないクラスであり、インスタンス化も可能です。

インスタンス化する
class SampleClass:
    pass


sample = SampleClass()

Ellipsis(...)の場合

次にEllipsis(...)を利用してみます。

class SampleClass:
    ...

インスタンス化もできます。

class SampleClass:
    ...


sample = SampleClass()

メソッドで使用

passの場合

class SampleClass:
    def check(self):
        pass

sample = SampleClass()
print(sample.check())

上記のコードを実行するとNoneが返ってきます。

Ellipsis(...)の場合

class SampleClass:
    def check(self):
        ...


sample = SampleClass()
print(sample.check())

上記のコードを実行するとNoneが返ってきます。

returnでNoneを返す場合

class SampleClass:
    def check(self):
        return None


sample = SampleClass()
print(sample.check())

実行はできて、Noneが返ってきますが、エディタやIDEに「これstatic メソッドじゃない?」と怒られてしまいます。

staticで書いた場合
class SampleClass:
    @staticmethod
    def check():
        return None
classmethodで書いた場合
class SampleClass:
    @classmethod
    def check(cls):
        return None

無理やり書きましたが、すべてNoneが返ってきます。仕様だけ決めて実装を後回しで作成する予定があるならば、Ellipsis(...)を使用するのが良いでしょう。
→「return None」を記述するコードは、実装だと思われてもおかしくないのではと感じます。

関数で使用

Ellipsis(...)を利用する

def my_covert(arg: int) -> set:
    ...

この関数を実行すると引数が何であれNoneが実行されます。

overloadをつけると両方定義できる

from typing import (
    overload
)


@overload
def my_covert(arg: int) -> set:
    ...


def my_covert(arg: int) -> set:
    return {arg}

実行すれば下の実装したクラスが実行されます。

Discussion