凉城旧巷
Python从入门到自闭,Java从自闭到放弃,数据库从删库到跑路,Linux从rm -rf到完犊子!!!

classmethod、staticmethod装饰器

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

1、绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入):

(1) 绑定到类的方法:用classmethod装饰器装饰的方法。

         为类量身定制

         类.boud_method(),自动将类当作第一个参数传入

       (其实对象也可调用,但仍将类当作第一个参数传入)

(2)绑定到对象的方法:没有被任何装饰器装饰的方法。

         为对象量身定制

         对象.boud_method(),自动将对象当作第一个参数传入

class Foo:
    def f1(self):     # 绑定给对象的方法
        print('对象')

    @classmethod    # 绑定给类的方法
    def f2(cls):
        print('绑定给类')

obj=Foo()
# 绑定给对象的方法,自动传入对象 obj.f1() # 绑定给类的方法,自动传值类 Foo.f2()

2、非绑定方法:用staticmethod装饰器装饰的方法

(1)不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已

class Foo:

     @staticmethod
    def f3(x, y, z):
        print('非绑定方法', x + y + z)


obj=Foo()

Foo.f3()     # 类可以调用

obj.f3()     # 对象都可以调用

3、注意点

非绑定方法与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

 

posted on 2018-08-22 11:54  凉城旧巷  阅读(117)  评论(0编辑  收藏  举报