Что такое переменная cls, используемая в классах Python?

Почему вместо self используется cls в качестве аргумента в классах 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)

Ответы

Ответ 1

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

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

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

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

Ответ 2

Он используется в случае метода класса. Подробнее см. эту ссылку.

EDIT: Как пояснил Адриен, это соглашение. Фактически вы можете использовать что-либо, кроме cls и self (PEP8).

Ответ 3

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

Ответ 4

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

Ответ 5

Вместо того, чтобы принимать собственный параметр, методы класса принимают параметр cls, который указывает на класс, а не на экземпляр объекта, когда метод называется. Поскольку метод класса имеет доступ только к этому аргументу cls, он не может изменить состояние экземпляра объекта. Это потребует доступа к себе. How- методы класса все еще могут изменять состояние класса, которое применяется ко всем экземпляры класса.

Кредит на книгу "Python Tricks"