为什么在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)
如果您想通过实例访问一个方法,请将第一个参数保留为self。例如:
class Test:
def hello(self, name):
print ('hello ', name)
obj = Test()
obj.hello('Rahul')
如果你想像在静态类中那样使用类名访问方法,最好使用cls作为方法的第一个参数。例如:
class Test:
def hello(cls, name):
print ('hello ', name)
Test.hello('Rahul')
这是个很好的问题,但不像问题那样令人生厌。
“自我”和“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只局限于特定的圆类。