python 面向对象之绑定方法与非绑定方法

发布时间 2024-01-05 09:21:40作者: -半城烟雨

python 面向对象之绑定方法与非绑定方法

【一】绑定方法与非绑定方法介绍

【1】绑定给对象的方法

class Student:
#数据属性
	school='清华大学'
#函数属性
	def read(self,name):
    	print(f'{name}正在读书')

实例化得到对象,对象调用对象的绑定方法

stu=Student()
stu.read('hope')

如果是类调用对象的绑定方法,那么就需要将对象作为参数传进去

Student.read(stu,'hope')

总结:

#对象调用绑定给对象的方法,不需要传额外的参数,直接能调用执行
# 类调用绑定给对象的方法,第一个位置参数必须是实例化得到的对象,加其他可能传入的额外的参数

【2】非绑定方法:不绑定给某个目标(类或对象)的方法 -- 静态方法

class Student:
#数据属性
	school='清华大学'
#函数属性
	def read(self,name):
    	print(f'{name}正在读书')
    # 【3】函数属性 --- 绑定给类的方法
    @classmethod  # 装饰器的语法糖
    def write(cls, name):
        print(cls)  # <class '__main__.Student'>
        print(f' {name} 正在写作业')

    # 【3】函数属性 --- 非绑定方法,本质上其实就是一个普普通通的函数
    @staticmethod
    def run(name):
        print(f' {name} 正在跑步')
# (1)对象调用非绑定方法.不需要传额外的参数
stu = Student()
stu.run(name='dream')
stu.read(name='dream')
# (2)类调用绑定方法.不需要传额外的参数
Student.run(name='hope')
Student.read(name='hope')
# (3)总结:
对象调用非绑定方法,不需要传额外的参数
类调用非绑定方法,不需要传额外的参数        
    

【二】绑定方法与非绑定方法总结

【1】概念上看

  • 绑定方法:绑定给某个类或对象的方法叫绑定方法
  • 非绑定方法:不绑定给某个类或对象的方法叫绑定方法

【2】调用方式上看

  • 绑定给对象的方法:对象可以任意调用,类可能会受到某些限制
  • 绑定给类的方法:类可以任意调用,对象可能受到影响
  • 非绑定方法:不受类和对象的限制,可以任意调用

【3】定义方式上看

lass Person():
    # 【1】绑定给对象的方法:正常我们定义的所有方法都是绑定给对象的方法
    # 在定义方法的时候,会自动补全 self
    def read(self):
        print(self)

    # 【2】绑定给类的方法:用装饰器装饰我们想要绑定给类的方法
    # 在定义方法的时候,会自动补全 cls
    @classmethod
    def write(cls):
        print(cls)

    # 【3】非绑定方法:既不绑定给对象也不绑定给类
    # 在定义方法的时候,不会自动补全参数
    @staticmethod
    def run():
        ...

【4】三种函数的调用

# 【1】绑定给对象的方法
# (1)对象调用
p = Person()
p.read()
# (2)类调用,self的值就是实例化得到的对象
Person.read(Person())
# 【2】绑定给类的方法
# (1)类调用
Person.write()
# (2)对象调用
p = Person()
p.write()
# 【3】静态方法(非绑定方法)
# (1)对象调用
p = Person()
p.run()
# (2)类调用
Person.run()