クラスメソッド.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