为什么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)
7条答案
按热度按时间hc2pp10m1#
"self"
和"cls"
之间的区别在PEP 8
中定义。正如Adrien所说,这不是强制性的。这是一种编码风格。PEP 8
表示:始终使用
self
作为示例方法的第一个参数。始终使用
cls
作为类方法的第一个参数。holgip5t2#
cls
意味着方法属于类,而self意味着方法与类的示例相关,因此具有cls
的成员通过类名访问,而具有self的成员通过类的示例访问......如果您来自java背景,这与java中的static member
和non-static members
概念相同。ugmeyewa3#
它在类方法的情况下使用。请查看此引用以了解更多详细信息。
编辑:正如Adrien所阐明的,这是一个约定。实际上,除了
cls
和self
(PEP8),你可以使用任何东西。kjthegm64#
这是一个很好问题,但不像问题那样缺乏'self'和'cls'使用方法之间存在差异,尽管类比地说,它们在同一个地方
现在你可以看到两个都是moon函数,但是一个可以在类内部使用,而另一个函数名moon可以用于任何类。
对于实际编程方法:
在设计circle类时,我们使用area方法作为cls而不是self,因为我们不希望area仅限于特定的circle类。
wd2eg0qa5#
类方法不接受self参数,而是接受一个cls参数,当方法被调用时,该参数指向类-而不是对象示例。由于类方法只能访问这个cls参数,它不能修改对象示例状态。这需要访问self。但是,类方法仍然可以修改应用于类的所有示例的类状态。
-* 巨蟒的把戏 *
slhcrj9b6#
如果要通过示例访问方法,请将第一个参数保留为self。例如:
如果你想像在静态类中那样使用类名来访问方法,最好使用cls作为方法中的第一个参数。例如:
vtwuwzda7#
此代码片段演示了
class
方法与instance
方法之间的差异。变量名
(lol ,
的使用是有效的。注意:变量名
(self ,
和(cls,
是 * 样式***而不是***语法 * answered Jan 25, 2011, Baskaya