Difference between Class and Instance methods
我正在阅读PEP 0008(样式指南),我注意到它建议使用self作为实例方法中的第一个参数,而cls作为类方法中的第一个参数。
我已经使用并编写了一些类,但我从未遇到过类方法(好吧,一个将cls作为参数传递的方法)。有人能给我举几个例子吗?
谢谢!
实例方法
创建实例方法时,第一个参数始终是
下面是一个名为
1 2 3 4 5 6 7 | class Inst: def __init__(self, name): self.name = name def introduce(self): print("Hello, I am %s, and my name is" %(self, self.name)) |
现在要调用这个方法,我们首先需要创建一个类的实例。一旦我们有了一个实例,我们就可以在它上面调用
1 2 3 4 5 6 | myinst = Inst("Test Instance") otherinst = Inst("An other instance") myinst.introduce() # outputs: Hello, I am <Inst object at x>, and my name is Test Instance otherinst.introduce() # outputs: Hello, I am <Inst object at y>, and my name is An other instance |
如您所见,我们没有传递参数
类方法的思想与实例方法非常相似,唯一的区别是,我们现在将类本身作为第一个参数传递,而不是将实例hiddenly作为第一个参数传递。
1 2 3 4 5 | class Cls: @classmethod def introduce(cls): print("Hello, I am %s!" %cls) |
因为我们只向方法传递一个类,所以不涉及实例。这意味着我们根本不需要实例,我们像调用静态函数一样调用类方法:
1 2 | Cls.introduce() # same as Cls.introduce(Cls) # outputs: Hello, I am <class 'Cls'> |
请注意,
1 2 3 4 5 | class SubCls(Cls): pass SubCls.introduce() # outputs: Hello, I am <class 'SubCls'> |