绑定方法和非绑定方法
一、绑定方法
绑定方法其实就是类中的函数,绑定给谁,由谁来调用,就是谁的绑定方法。分为对象的绑定方法和类的绑定方法。
绑定方法得特殊之处:绑定给谁,谁来调用,就自动将它本身当做第一个参数传入。
1.1 类的绑定方法
1、绑定到类的绑定方法:
就是用classmethod装饰器装饰的方法,为类量身定制,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当做第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类的绑定方法
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod
def test(cls): # 这个方法加了classmethod装饰器就是类的绑定方法
print(cls) # <class '__main__.Person'>
print('这是类的绑定方法')
def get_obj_by_name(self,name): # 这个就是对象的绑定方法
pass
p1 = Person('zyl',18)
p1.test() # 对象也可以调用类的绑定方法test(),但是默认传的第一个参数还是该对象的类
2、类的绑定方法用在什么地方
当不需要通过对象,只需要通过类就能完成某些事的时候,就把该方法定义为类的绑定方法。
1.2 对象的绑定方法
就是类内没有被任何装饰器装饰的方法,为对象量身定制,对象调用该方法的时候,会自动将对象作为第一个参数传入。
类也可以调用对象的绑定方法,但是这是就变成了普通的函数,有几个参数就要传几个,没有自动传值一说。具体例子上面就有,就不再写一遍了,在之前的博客中也有整理。
二、非绑定方法(静态方法)
2.1 什么是静态方法
非绑定方法也称为静态方法,就是用staticmethod装饰器装饰的方法,不与类或对象绑定,但是类和对象都可以调用,但是必须按照函数的规则来,没有自动传值一说,就是一个普通工具。
注意:与绑定到对象的方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是对象的绑定方法,不是普通函数,对象调用该方法就会自动传值,而staticmethod装饰器装饰的方法,不管谁来调用,都无法自动传值。
class Person:
def __init__(self,name,age):
self.name = name
seld.age = age
@staticmethod
def staticmethod():
print('我是静态方法,谁都不绑定')
2.2 作用
- 一个方法跟类和对象都没有关系的时候,可以定义成静态方法,一般在类内部使用,但类外部也可以使用
- 就是一个普通函数,想把它拿到类中管理,就可以定义成静态方法