绑定方法与非绑定方法md
绑定方法
绑定方法:绑定给某个目标(类或对象)的方法 --- 动态方法
绑定给对象的方法
类的属性有两种:一种是数据属性 一种是函数属性
class Student:
# 【1】数据属性
address = '上海'
# 【2】函数属性
def run(self, name):
print(f' {name} 正在跑步')
实例化得到对象,对象调用对象的绑定方法
stu = Student()
stu.run('qc') # qc 正在跑步
print(stu.address) # 上海
如果是类调用对象的绑定方法,那么就需要将对象作为参数传进去
stu = Student()
Student.run(stu, name='qc') # qc 正在跑步
在Python里面一切皆对象,八大基本数据类型全是对象,包括 None
Student.run('aaa', 'qc') # qc 正在跑步
Student.run(None, 'qc') # qc 正在跑步
总结:
- 对象调用绑定给对象的方法,不需要传额外的参数,直接能调用执行
- 类调用绑定给对象的方法,第一个位置参数必须是实例化得到的对象,加其他可能传入的额外的参数
绑定给类的方法
- classmehtod是给类用的,即绑定到类
class Student:
address = '上海'
@classmethod # 装饰器的语法糖
def read(cls,name):
print(f' {name} 正在读书')
对象调用绑定给类的方法,这里会自动检索到当前实例化得到当前对象的类,然后将类作为cls的参数传入
stu = Student()
stu.read(name='qc') # qc 正在读书
类调用绑定给类的方法,将调用此方法的类,作为cls的参数自动传入
Student.read(name='qc') # qc 正在读书
总结
- 对象调用绑定给类的方法,不需要传入额外的参数,会自动将当前实例化此对象的类作为参数传入
- 类调用绑定给类的方法,不需要额外的传入参数,会自动将调用次方法的类作为参数传进去
非绑定方法
- 在类内部用staticmethod装饰的函数即非绑定方法,就是普通函数
- statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果
class Student:
address = '上海'
@staticmethod
def run(name):
print(f' {name} 正在跑步')
对象调用非绑定方法.不需要传额外的参数
stu = Student()
stu.run(name='qc') # qc 正在跑步
类调用绑定方法.不需要传额外的参数
Student.run(name='qc') # qc 正在跑步
总结:
-
对象调用非绑定方法,不需要传额外的参数
-
类调用非绑定方法,不需要传额外的参数
绑定方法与非绑定方法总结
概念上来说
绑定方法 : 就是绑定给某个目标(类或对象)的方法才叫绑定方法
非绑定方法:不绑定给某个目标(类或对象)的方法叫非绑定方法
调用方式上来看
绑定给对象的方法:对象可以任意调用,类可能会受到某些限制
绑定给类的方法:类可以任意调用,对象可能会受到某些影响
非绑定方法:不受类和对象的限制,可以任意调用
定义方式上来看
绑定给对象的方法:正常我们定义的所有方法都是绑定给对象的方法,在定义方法的时候,会自动补全 self
绑定给类的方法:用装饰器装饰我们想要绑定给类的方法,在定义方法的时候,会自动补全 cls
非绑定方法:既不绑定给对象也不绑定给类,在定义方法的时候,不会自动补全参数