暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

「Python」工具人之初学装饰器(一)

将咖啡转化为程序的工具人 2021-09-09
319

       本周,有一位工具人的使(CHAN)唤(PING)者(JING LI)离开了工具人修理者联盟,工具人表面上流露出对兄弟之情的不舍,内心其实却暗自欢喜,为什么呢?因为终于少了个挥舞工具人的抓手,多了一个未来可抱可舔的大腿。

      在祝福他的同时,工具人也离别相赠一本装逼宝典,好让他在新单位别辜负了工具人多年的调教,时刻人前显圣。


      在这本宝典里,工具人使用了装饰器来给自己加戏,不仅要把工作完成的漂亮,还要会包装自己,让领导认识到你的能力和贡献。

所以工具人创建了ZHUANG_B装饰器:



    class ZHUANG_B(object):
    def __init__(self, words):
    self._words = words


    def __call__(self, func):
    def wrapper(*args, **kwargs):
    print(self._words)
    func(args[0]) # 传入的是self
    return wrapper

    class ToolMan():
    def __init__(self, name):
    self._name = name


    @ZHUANG_B('手握明月摘星辰,世间唯我工具人')
    def working(self):
    print("我是{},我活好".format(self._name))
    tool_man = ToolMan('工具人')
    tool_man.working()

    每次工具人完成工作时,都会伴随着BGM和旁白:

      手握明月摘星辰,世间唯我工具人
      我是工具人,我活好

            在这里我们使用了类作为装饰器的一种实现方式,旁白作为ZHUANG_B类的参数,在类调用时(__call__函数)打印。

      除了工作能力要强,还要会融入团队,在团建等活动中要一显身手~

        class ZHUANG_B(object):
        def __init__(self, words):
        self._words = words


        @staticmethod
        def hobby(hobby):
        def wrapper3(func):
        def wrapper2(*args, **kwargs):
        print('{}工具人,插标卖首跟不跟?'.format(hobby))
        return func(args[0]) # 传入的是self
        return wrapper2
        return wrapper3


        def __call__(self, func):
        def wrapper(*args, **kwargs):
        print(self._words)
        func(args[0]) # 传入的是self
        return wrapper


        class ToolMan():
        def __init__(self, name):
        self._name = name


        @ZHUANG_B('手握明月摘星辰,世间唯我工具人')
        def working(self):
        print("我是{},我活好".format(self._name))


        @ZHUANG_B.hobby('德州之王')
        def playing(self):
        print("我是{},我ALL IN".format(self._name))

        tool_man = ToolMan('工具人')
        #tool_man.working()
        tool_man.playing()

              同样,我们也可以使用函数作为装饰器的实现,这里我们使用了hobby静态函数,让工具人在参加团队建设时,能技惊四座。

          德州之王工具人,插标卖首跟不跟?
          我是工具人,我ALL IN

                 这里的hobby函数有些不太容易理解,工具人是这样理解的,hobby是一个传入了“德州之王”参数的函数,它返回了一个函数wrapper3,wrapper3的入参是一个函数指针func即playing,由于playing有参数,所以需要再被wrapper2包装,由它接受入参后,传递给func。

                  但木秀于林,风必摧之。

                  所以太过优秀的工具人,平时需要谦虚。这里我们用Character人设装饰器直接装饰ToolMan类,来给自己增加低调的人设。

            class Character(object):
            def __init__(self, cls):
            self._cls = cls


            def __call__(self, name):
            print("我是{},我很低调".format(name))
            return self._cls(name)


            @Character
            class ToolMan():
            def __init__(self, name):
            self._name = name


            @ZHUANG_B('手握明月摘星辰,世间唯我工具人')
            def working(self):
            print("我是{},我活好".format(self._name))


            @ZHUANG_B.hobby('德州之王')
            def playing(self):
            print("我是{},我ALL IN".format(self._name)

                    于是,工具人在初始化时会首先申明:

              我是工具人,我很低调

                    好了,希望工具人的好兄弟,能明白工具人的一片冰心,祝他鹏程万里,苟富贵勿相忘!


              文章转载自将咖啡转化为程序的工具人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论