Python——class的基础知识(Python的实例方法,类方法,静态方法之间的区别及调用关系)
如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即可调用,完全不需要类,那么你可能会问,那要类还有什么毛用? 类就是用来面向对象编程啦,类可以有自己的属性,类可以创建很多实例,每个实例可以有不同的属性,这也就保存了很多私有的数据,总之都有存在的必要.
再来看上面这张图,在类里面定义的函数就是方法,类方法需要@ classmethod 修饰并且有个隐藏参数 cls,实例方法必须有个参数 self, 静态方法必须有 @staticmethod修饰,类和实例都可以访问静态方法,实例可以访问实例方法也可以访问类方法,类可以访问类方法也可以访问实例方法,访问实例方法必须要带参数 self, 可以理解为类其实也是一个实例,类访问实例方法不带参数会报错的.类本身可以访问函数,实例却不行.
总结:类的属性:公有属性;(没有两个下划线开始)
私有属性;(函数、方法或属性的名字以两个下划线开始)
实例属性;(以self作为前缀的属性,没有self作为前缀声明的,则该变量只是普通的局部变量;即一个对象对应一个);
静态属性;(静态变量,可以被类直接调用,也可被实例化对象调用;可以被多个实例化对象共享;)
类的内置方法:方法名是由前后两个下划线加字母组成。比如:__init__(self):
staticmethod()或@staticmethod 指令的方式把普通的函数转换为静态方法。
是否有一个self参数,是区别方法和函数的标志;
类方法的作用和静态方法相似,都可以被其他实例对象共享。不同的是类方法必须提供self参数。类方法使用classmethod()或“@classmethod”指令定义。静态方法可以没有self参数。
Python支持多继承。