web-dev-qa-db-ja.com

Pythonクラスで使用される 'cls'変数は何ですか?

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)
215
Scaraffe

"self""cls"の区別は PEP 8 で定義されています。エイドリアンが言ったように、これは必須ではありません。それはコーディングスタイルです。 PEP 8言う:

関数とメソッドの引数

インスタンスメソッドの最初の引数には、常にselfを使用します。

クラスメソッドの最初の引数には常にclsを使用します。

241
Baskaya

クラスメソッドの場合に使用されます。詳細については、 このリファレンス を確認してください。

編集:エイドリアンによって明らかにされたように、それは慣習です。実際に使用できるのはclsself以外です(PEP8)。

49

clsはメソッドがクラスに属していることを意味し、selfはメソッドがクラスのインスタンスに関連していることを意味するため、clsを持つメンバーはクラス名によってアクセスされます。 Javaバックグラウンドから来た場合、Javaのstatic memberおよびnon-static membersと同じ概念。

26

これは非常に良い質問ですが、質問ほど望んでいません。 「自己」と「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メソッドを使用します。

9
TheExorcist