类方法和静态方法
本章概述:python基础——面向对象中的类方法和静态方法
一、类属性和对象属性
从字面上其实也可以理解,类属性是在类中定义的属性,属于类,对象属性是创建实例初始化的属性,属于对象实例。
1 | class Student: |
访问类属性通过类名.属性名
来访问。类属性和对象属性还是很容易理解的,这两种的访问方式也不同,在某些特殊时候,类属性可以通过对象来访问,比如该对象中没有该属性时,访问对象名.属性名
则可以访问到类属性,但是最好不要这么做,因为这么做容易导致类属性和对象属性两者混乱。
二、类方法和静态方法
之前我们在类中定义的方法都是属于对象方法,换句话说就是这些方法都是跟对象相关的方法,是对象使用的到的方法。除此之外,类中还可以存在类方法和静态方法,这两类方法是属于类的,也就是说这两种方法不是对象该有的方法。
类方法用@classmethod装饰器修饰,并且第一个参数是cls,代表类本身;一般使用类名.方法名
调用,不建议使用对象名.方法名
调用;没有self,不可以使用类中其他对象的属性和方法;可以调用类方法、类属性和静态方法,通过cls调用。
静态方法通过@staticmethod 装饰器修饰;静态方法的写法跟写普通函数一样;一般使用类名.方法名
调用,不建议使用对象名.方法名
调用;既没有self也没有cls,因此不可以使用类中其他对象的属性和方法;形式参数中没有cls,不建议使用类属性\类方法\静态方法;静态方法是一个单独的方法,我们在定义类的时候,有时候部分函数跟类没关系,但是我们又需要用到它,我们可以在类外面单独定义这个函数,但是这样子的话会使代码变得难理解,因此使用静态方法,把这个单独的函数搬到类中表示。
1 | class Student: |
像上面的代码,写了一个函数用来判断传入的参数值是否为字符串,这个函数跟s1这个对象是没有啥关系的,实际上也可以在类外部定义函数并进行判断。
1 | class Student_s: |
静态方法和类方法二者并没有本质区别,静态方法通常是一个独立的函数,并没有和特定的对象绑定。
由于Python类中只能有一个初始化方法,不能按照不同的情况初始化类,所以类方法可以用来自定义初始化,比如上面的类方法样例,当然静态方法也可以,但是静态方法由于没有形参,所以每次都要写上类的名字,类名一改静态方法就会发生错误,所以静态方法更适合于用来定义跟类没有任何关系的函数,而类方法则可以用来自定义初始化。