Pythonクラスの引数としてcls
の代わりにself
が使用されることがあるのはなぜですか?
例えば:
class Person:
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
@classmethod
def from_fullname(cls, fullname):
cls.firstname, cls.lastname = fullname.split(' ', 1)
"self"
と"cls"
の区別は PEP 8
で定義されています。エイドリアンが言ったように、これは必須ではありません。それはコーディングスタイルです。 PEP 8
言う:
関数とメソッドの引数:
インスタンスメソッドの最初の引数には、常に
self
を使用します。クラスメソッドの最初の引数には常に
cls
を使用します。
クラスメソッドの場合に使用されます。詳細については、 このリファレンス を確認してください。
編集:エイドリアンによって明らかにされたように、それは慣習です。実際に使用できるのはcls
とself
以外です(PEP8)。
cls
はメソッドがクラスに属していることを意味し、selfはメソッドがクラスのインスタンスに関連していることを意味するため、cls
を持つメンバーはクラス名によってアクセスされます。 Javaバックグラウンドから来た場合、Javaのstatic member
およびnon-static members
と同じ概念。
これは非常に良い質問ですが、質問ほど望んでいません。 「自己」と「cls」の使用方法には違いがありますが、それらは同じ場所にあります
def moon(self,moon_name):
self.MName =moon_name
#but here cls method its use is different
def moon(cls,moon_name):
instance=cls()
instance.MName=moon_name
これで、両方がムーン関数であることがわかりますが、1つはクラス内で使用でき、他の関数名moonは任意のクラスで使用できます。
実用的なプログラミングアプローチの場合:
サークルクラスを設計する際に、エリアをサークルの特定のクラスのみに制限したくないため、selfではなくclsとしてareaメソッドを使用します。