33、面向对象之绑定与非绑定方法

面向对象 / 2020-12-31

一、绑定方法与非绑定方法

Python类中定义的函数分两种:绑定方法、非绑定方法!其中绑定方法又分绑定到对象与绑定到类,在类中的函数默认是绑定到对象的,即类中函数默认是给对象用的,而不是给类用的!

多态

Python本来就是多态的,不用管。。。讲完了,下课!

1.1、绑定方法

绑定方法特殊之处在于将调用者本身当作第一个参数自动传入

  • 绑定给对象的方法,调用者是对象,自动传入的是对象

  • 绑定给类的方法,调用者是类,自动传入的也是类

1.1.1、绑定到类classmethod()

​ classmethod,将它下面的函数装饰成绑定给类的方法,可以省却手动传入参数。

class School:
    def __init__(self):
        ...
    @classmethod
    def print_str(cls):
        return f'我不用参数'

print(School.print_str())  # 要是以往不用classmethod,这里需要传参!

# 执行得到结果
我不用参数

1.2、非绑定方法

staticmethod(),将下面函数装饰成一个静态方法,没有自动传参,即谁都不给面子!

class School:
    def __init__(self):
        ...
    @staticmethod
    def print_str(cls):
        return f'要想运行我,留下买路财!'

print(School.print_str('haha'))
stu1 = School()
print(stu1.print_str('haha'))

# 执行得到结果
要想运行我,留下买路财!
要想运行我,留下买路财!

不绑定,即没有绑定给任何人,调用者可以是类、对象等,没有自动传参

世间微尘里 独爱茶酒中