与x27之间的差异;cls&x27;和';自我';在Python类中?
为什么在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
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++上下文中理解它。