参考链接:
https://www.cnblogs.com/seasonhu/articles/10722594.html
https://www.cnblogs.com/aaronthon/p/9205464.html
1. self表示一个类的实例对象本身。如果用了staticmethod就无视这个self了,就将这个方法当成一个普通的函数使用了。
2. cls表是这个类本身。
python类里会出现这三个单词,self和cls都可以用别的单词代替,类的方法有三种,
一是通过def定义的 普通的一般的,需要至少传递一个参数,一般用self,这样的方法必须通过一个类的实例去访问,类似于c++中通过对象去访问;
二是在def前面加上@classmethod,这种类方法的一个特点就是可以通过类名去调用,但是也必须传递一个参数,一般用cls表示class,表示可以通过类直接调用;
三是在def前面加上@staticmethod,这种类方法是静态的类方法,类似于c++的静态函数,他的一个特点是参数可以为空,同样支持类名和对象两种调用方式;
class A(object):
def func1(self):
print("func1:", self)
@staticmethod
def func2():
print("func2")
@classmethod
def func3(cls):
print("func3:", cls)
a = A()
a.func1() # 最常见的调用方式,但与下面的方式相同
# func1: <__main__.A object at 0x0000014788701EB8>
A.func1(a) # 这里传入实例a,相当于普通方法的self
# func1: <__main__.A object at 0x0000014788701EB8>
A.func2() # 这里,由于静态方法没有参数,故可以不传东西
# func2:
A.func3() # 这里,由于是类方法,因此,它的第一个参数为类本身。
# func3: <class '__main__.A'>
print(A) # 可以看到,直接打印A,与上面那种调用返回同样的信息。
# <class '__main__.A'>
运行结果:
func1: <__main__.A object at 0x00000173A1206080>
func1: <__main__.A object at 0x00000173A1206080>
func2
func3: <class '__main__.A'>
<class '__main__.A'>
浙公网安备 33010602011771号