009---绑定方法与非绑定方法

绑定方法和非绑定方法

绑定方法(绑定给谁,谁来调用就自动将它本身作为第一个参数传进去)

  • 绑定给类:没有加任何装饰器的方法,其实对象也可以调用。只不过内部将类作为第一个参数传进去。
  • 绑定给对象:加classmethod装饰器的方法,其实类也可以调用,只不过要将对象作为第一个参数传进去。

非绑定方法

  • 在类的内部使用staticmethod装饰器的函数叫做非绑定方法,谁都可以调用,没有自动传值一说,就是普通函数。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "ziya"
# Date: 2018-08-27


class Foo:
    def __init__(self, name):
        self.name = name

    def tell(self):
        return '名字是:%s' % self.name

    @classmethod
    def func(cls):
        return '类方法:%s' % cls

    @staticmethod
    def func1(obj):
        print('我是非绑定方法,谁都(%s)可以调用' % obj)

    def func2():
        print(111)


f = Foo('江伟')

print('绑定到类,类方法:', Foo.func)
print('绑定到对象,实例方法:', f.tell)
print('类调用实例方法,但是第一个参数传对象', Foo.tell(f))
print('对象用类方法,虽然不要传参数,但是内部仍然是以类作为第一个参数传入', f.func())

f.func1('我是对象')  # 我是非绑定方法,谁都(我是对象)可以调用
Foo.func1('我是类')  # 我是非绑定方法,谁都(我是类)可以调用

'''
在内部定义的函数,分为两大类:
    1、绑定方法:
        ---绑定到对象的方法:未被任何装饰器修饰的
            绑定给谁,就应该由谁来调用,会自动传参

        ---绑定到类的方法:在类内部定义的被装饰器classmethod修饰的方法

    2、非绑定方法
        没有自动传值一说,就是一普通工具而已
'''

绑定到类,类方法: <bound method Foo.func of <class 'main.Foo'>>
绑定到对象,实例方法: <bound method Foo.tell of <main.Foo object at 0x000002B240FAED68>>
类调用实例方法,但是第一个参数传对象 名字是:江伟
对象用类方法,虽然不要传参数,但是内部仍然是以类作为第一个参数传入 类方法:<class 'main.Foo'>
我是非绑定方法,谁都(我是对象)可以调用
我是非绑定方法,谁都(我是类)可以调用

原文地址:https://www.cnblogs.com/xjmlove/p/10324522.html