为什么有时会使用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)
答案 0 :(得分:240)
"self"
和"cls"
之间的区别在PEP 8
中定义。正如阿德里安所说,这不是强制性的。这是一种编码风格。 PEP 8
说:
函数和方法参数:
始终使用
self
作为实例方法的第一个参数。始终使用
cls
作为类方法的第一个参数。
答案 1 :(得分:49)
答案 2 :(得分:25)
cls
意味着该方法属于该类,而self意味着该方法与该类的实例相关,因此具有cls
的成员由类名访问,其中访问self的那个通过类的实例...如果你来自java背景,它与java中的static member
和non-static members
概念相同。
答案 3 :(得分:8)
这是一个非常好的问题,但并不像缺乏问题那样。 “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
现在你可以看到两个都是月亮函数,但是一个可以在类中使用,而其他函数名称月亮可以用于任何类。
对于实用的编程方法:
在设计圆类时我们使用区域方法作为cls而不是self,因为我们不希望区域仅限于特定的圆类。
答案 4 :(得分:0)
类方法不接受自身参数,而是采用 cls 参数,该参数指向类,而不是对象实例。 该方法被调用。 由于class方法只能访问此cls参数,因此它不能 修改对象实例状态。那将需要自我。但是,类方法仍然可以修改适用于所有方法的类状态 该类的实例。
- Python技巧