🐍
Pythonの省略の使い方 考察
※筆者は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