绑定方法与非绑定方法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

非绑定方法:既不绑定给对象也不绑定给类,在定义方法的时候,不会自动补全参数

posted @ 2024-01-12 21:28  蓝幻ﹺ  阅读(7)  评论(0编辑  收藏  举报