开一家网站建设公司,公司怎么找做网站,网络营销专业技能,网站做下cdn上一篇#xff0c;我们讲到Python类中的属性是有区别的#xff0c;爱思考的小伙伴们可能就会问了#xff0c;Python中的方法是不是也有区别呢#xff1f;是的#xff0c;而且Python中的方法区别更大#xff0c;让我们来看看吧~
Python类中的三种方法
Python中的方法可以分…上一篇我们讲到Python类中的属性是有区别的爱思考的小伙伴们可能就会问了Python中的方法是不是也有区别呢是的而且Python中的方法区别更大让我们来看看吧~
Python类中的三种方法
Python中的方法可以分为三类
实例方法第一个参数是实例对象 self必须通过实例去调用。
类方法需要在方法前加 classmethod 修饰第一个参数是类本身一般写作cls类和实例都可以调用。
静态方法需要在方法前加 staticmethod修饰没有隐含传递的参数方法体中不能使用类或实例的任何属性和方法
这里的classmethod 和 staticmethod 都是函数装饰器(Decorators)简单来说它是一个修改其它函数的功能的函数。具体的细节涉及到Python更深层的东西。在这里我们只需要了解只要它俩出现那么这个方法就是类方法或者静态方法。
看过上一篇的小伙伴们应该都知道self是什么了在这里简单再说一下我们可以使用self指代的是当前的实例相当于每个实例的钥匙根据self每个实例只能调用自己的变量和方法。
是不是看完还是觉得有点绕呢~为了更清楚地了解这三个方法的差异我们还是拿例子来进行讲解
在这个例子里面我们定义了一个类Student小伙伴们应该会发现我们在Student类里定义了一个类属性grade和两个实例属性age和height。然后我们分别定义了三个方法根据刚开始我们给的三种方法的介绍小伙伴们能不能看出这三个方法分别属于哪一种呢
这个不难~
print_age方法是一个实例方法它的第一个参数是self前面没有任何的修饰。
print_grade方法是一个类方法他的第一个参数是cls前面使用classmethod修饰。
Print_info方法是一个静态方法他没有任何的参数前面使用staticmethod修饰
我们在定义完Student类后我们分别使用类Student和实例tom去调用这三个方法看看会发生什么~
大家观察代码第15-22行可以看到当我们使用类Student调用print_age方法时它会报错显示缺少一个参数self。这是因为这里不是这时还没有类的实例而且方法中的self.age属性也不存在这时候是不能调用实例方法的。而我们使用类Student调用print_grade方法就没有问题因为我们已经声明这是个类方法而且grade这个属性在类中已经定义好了。同样因为我们已经声明print_info是静态方法所以调用也是没有问题的。
我们也根据Student类生成了一个实例tom然后我们使用实例tom去调用这三个方法看看会发生什么~
如上面的代码所示三个方法都正确的输出了结果表明这三种方法都可以被类的实例调用。
我也给小伙伴们制作了一个简单的表格方便大家查询。
实际使用中如何选择三种方法
那么说了这么多比较了这三种方法的差异那么为什么会有这三种方法的区别呢因为他们对于不同属性的调用有所区别可被调用的对象不同所以在实际使用中就是根据这些差异来选择最合适的方法。
实例方法是类中最普遍的方法我们通常定义的都是实例方法不需要多说了。
关于类方法如果说我现在要定义一个方法这个方法只需要调用类属性也只在把类当作一个对象使用的时候才会需要这个方法或者说在逻辑上采用类本身作为对象来调用更合理这时候就应该使用类方法。
关于静态方法我们可以发现它不需要任何的参数不会涉及到类中的属性和方法的操作。本质上说它只是在逻辑上逻辑上属于类但是和类本身没有关系在碰到这种情况时可以定义静态方法。
结束语
在Python的类中不同的方法有不同的应用范围根据自己的实际需求选择合适的方法才能发挥每个方法最大的用处。小伙伴们快快试起来吧~