Skip to main content

クラスメソッド.1.定義

Python

py
class Class01:
@classmethod
def method01(cls, param1):
...
py
class Class01:
@staticmethod
def method01(param1):
...

たぶん、 cls なのは慣例で、 アノテーション (@classmethod) を指定しておくと 第1引数に クラスオブジェクトが渡される。 なので、@classmethod は可読性やドキュメントのためのものではなく、必須。

@staticmethod との違いは、たぶん、cls にアクセスする必要があるかないか。 cls.XXX の代わりにクラス名を明示 (Class01.XXX) で足りそうな気もするが、 クラスの定義内でクラス名を明示的に書くのはクラス名の変更があったときに面倒なのでこっちが良いのだろう。

Swift

swift
class Class01 {
class func method01(...) {
...
}
}

class とつけた場合は override できるが static とつけた場合は できない。

type method という。

Struct では static

swift
struct Struct01 {
static func method01(...) {
...
}
}

Ruby

rb
class Class01
def self.method01(...)
...
end
end