与x27之间的差异;cls&x27;和';自我';在Python类中?

与x27之间的差异;cls&x27;和';自我';在Python类中?,python,class,object,terminology,self,Python,Class,Object,Terminology,Self,为什么在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.lastna

为什么在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)

它用于类方法的情况。查看更多详细信息


编辑:正如阿德里安所澄清的,这是一个惯例。实际上,除了使用
cls
self
PEP8)之外,您可以使用任何东西。

中定义了
“self”
“cls”
之间的区别。正如阿德里安所说,这不是强制性的。这是一种编码风格<代码>政治公众人物8说:

函数和方法参数:

始终使用
self
作为实例方法的第一个参数

始终使用
cls
作为类方法的第一个参数


这是一个很好的问题,但并不像问题那个样缺乏。 “self”和“cls”使用的方法有区别,尽管它们在相同的位置

def moon(self, moon_name):
    self.MName = moon_name

#but here cls method its use is different 

@classmethod
def moon(cls, moon_name):
    instance = cls()
    instance.MName = moon_name
现在您可以看到这两个函数都是moon函数,但一个可以在类内使用,而另一个函数名moon可以用于任何类

对于实用编程方法:


在设计圆类时,我们使用area方法作为cls而不是self,因为我们不希望area仅限于特定的圆类。

cls
意味着该方法属于该类,而self意味着该方法与该类的实例相关,因此,具有
cls
的成员通过类名访问,而具有self的成员通过类的实例访问……如果您来自java背景,这与java中的
静态成员
非静态成员
的概念相同

类方法不接受自参数,而是使用一个cls参数,该参数指向类,而不是对象实例 方法被调用。 由于类方法只能访问此cls参数,它不能 修改对象实例状态。这将需要接触自我。但是,类方法仍然可以修改应用于所有类的类状态 类的实例


python技巧

如果你想添加更多的代码,如果正确的话,会批准它。谢谢你的java参考,现在明白了。比你提到的<代码>静态成员< /C>和<代码>非静态成员< /C> >,在C++上下文中理解它。