Для чего используется переменная cls в классах Python? - PullRequest
219 голосов
/ 06 января 2011

Почему cls иногда используется вместо self в качестве аргумента в классах Python?

Например:

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)

Ответы [ 4 ]

244 голосов
/ 25 января 2011

Различие между "self" и "cls" определено в PEP 8.Как сказал Адриен, это не обязательно.Это стиль кодирования.PEP 8 говорит:

Аргументы функций и методов :

Всегда используйте self в качестве первого аргумента методов экземпляра.Всегда используйте cls для первого аргумента методов класса.

49 голосов
/ 06 января 2011

Используется в случае метода класса.Проверьте эту ссылку для получения дополнительной информации.

РЕДАКТИРОВАТЬ: Как разъяснил Adrien, это соглашение.Вы можете использовать все что угодно, но не используйте cls и self ( PEP8 ).

28 голосов
/ 11 марта 2018

cls подразумевает, что метод принадлежит классу, в то время как self подразумевает, что метод связан с экземпляром класса, поэтому член с cls доступен по имени класса, а к элементу с self - экземпляр экземпляра класса.класс ... это то же самое понятие, что и static member и non-static members в Java, если вы из Java-фона.

9 голосов
/ 17 июня 2017

Это очень хороший вопрос, но не такой как вопрос.Существует разница между используемым методом «self» и «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

Теперь вы можете видеть, что оба являются функцией луны, но одну можно использовать внутри класса, в то время как другое имя функции moon можетиспользоваться для любого класса.

Для практического подхода к программированию:

При разработке класса круга мы используем метод area в качестве cls вместо self, потому что мы не хотим, чтобы area кбыть ограниченным только определенным классом круга.

...