Python类中使用的'cls'变量是什么?

Sca*_*ffe 237 python terminology class object self

为什么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)
Run Code Online (Sandbox Code Playgroud)

Bas*_*aya 261

之间的区别"self",并"cls"在定义PEP 8.正如阿德里安所说,这不是强制性的.这是一种编码风格.PEP 8说:

函数和方法参数:

始终self用于实例方法的第一个参数.

始终cls用于类方法的第一个参数.


Juh*_*nen 53

它用于类方法的情况.有关详细信息,请查看此参考.

编辑:正如阿德里安澄清的那样,这是一个惯例.你实际上可以使用除了cls和使用的任何东西self(PEP8).


小智 39

cls暗示该方法属于该类,而self暗示该方法与该类的实例相关,因此成员与cls类名访问,其中具有self的那个通过类的实例访问...它是相同的概念如static membernon-static members在Java中,如果你是从Java背景.

  • 谢谢你的Java参考,现在明白了。 (5认同)
  • 比你提到的“静态成员”和“非静态成员”,在c++的上下文中理解它 (2认同)

The*_*ist 16

这是一个非常好的问题,但并不像缺乏问题那样.使用'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
Run Code Online (Sandbox Code Playgroud)

现在你可以看到两个都是月亮函数,但是一个可以在类中使用,而其他函数名称月亮可以用于任何类.

对于实用的编程方法:

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

  • 如果您想添加更多编码人员正在寻找的内容,如果正确,将会批准它。 (3认同)

Rah*_*Jha 13

如果您想通过实例访问方法,请将第一个参数保留为 self。例如:

class Test:
   def hello(self, name):
      print ('hello ', name)

obj = Test()
obj.hello('Rahul')
Run Code Online (Sandbox Code Playgroud)

如果您想像在静态类中那样使用类名访问方法,最好使用 cls 作为方法中的第一个参数。例如:

class Test:
       def hello(cls, name):
          print ('hello ', name)


Test.hello('Rahul')
Run Code Online (Sandbox Code Playgroud)


小智 6

不是接受自参数,类方法采取CLS参数指向-and不是对象实例-当该方法被调用。由于类方法只能访问此 cls 参数,因此无法修改对象实例 state。那将需要访问 self 。但是,类方法仍然可以修改适用于该类所有实例的类状态。

- Python 技巧