一:绑定方法
1.绑定到对象的方法:没有被任何装饰器装饰的方法。
在类中定义的函数默认都是绑定到对象的方法
特点:参数的第一个必须是self 表示当前对象本身,使用对象来调用,调用时会自动传入对象
特点:参数的第一个必须是cls表示当前类本身,使用类名来调用,调用时会自动传入类
二:非绑定方法:用staticmethod装饰器装饰的方法
特点:不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通函数
不过由于作用域在类中所以需要使用类或对象类调用
总结
绑定到类的方法与绑定到对象的方法总结
异同点:
相同:
绑定对象调用时都有自动传参的效果
绑定到谁给谁就由谁来调用
不同:
绑定到类的方法自动传入当前类
绑定到对象的方法自动传入当前对象
案例
class Student:
school = "Tsinghua"
def say_hello(self):# 绑定到对象的方法
print(self)
print("hello i am a student my name is %s" % self.name)
def __init__ (self,name): #绑定到对象的方法
self.name = name
@classmethod # 绑定到类的方法
def school_info(cls):
print(cls)
print("the student from %s" % cls.school)
stu1 = Student("Jack")
print(stu1)
#输出 <__main__.Student object at 0x1063112e8>
#1.调用对象绑定方法
stu1.say_hello()
#输出 <__main__.Student object at 0x1063112e8>
#输出 hello i am a student my name is Jack
#查看对象绑定方法
print(stu1.say_hello)
#输出 <bound method Student.say_hello of <__main__.Student object at 0x10552b2e8>>
#含义 这个绑定方法是Student类中的say_hello函数,绑定到地址为0x10552b2e8的Student对象
#绑定方法本质上也是函数 只要能找到它就能调用它所以你可以这样来调用它
Student.say_hello(stu1)
#输出 <__main__.Student object at 0x103818390>
#输出 hello i am a student my name is Jack
print(Student)
#输出 <class '__main__.Student'>
#2.调用类绑定方法
Student.school_info()
#输出 <class '__main__.Student'>
#输出 the student from Tsinghua
#查看类绑定方法
print(Student.school_info)
#输出 <bound method Student.school_info of <class '__main__.Student'>>
#含义 这个绑定方法是Student类中的school_info函数,绑定到Student这个类