Python3重学基础:装饰器和方法的使用

1.声明

由于本人在复习基础知识,发现存在一个装饰器模式的东西,发现起始这就是一个方法,python中支持方法的传递

2.装饰器的简介

个人理解,装饰器本质就是一个方法,但是这个方法具有一个参数就是用来接收一个函数,在内部使用装饰器模式对方法进行扩展,并且这个方法可以其他的方法上使用:@+装饰器方法名称

3.一个简单的装饰器的demo


def show(func):
    def show_that():
        print("show_that")
        func()
        print("show_that")

    return show_that


class User():
    def __init__(self):
        self.name = ""
        self.age = 0
        self.sex = ""

    @staticmethod  # 表示这个方法就是一个静态的方法
    def desc():
        print("这是一个人")

    # 不加self表示这是一个静态的方法,但是idea会报红,使用@staticmethod就不会爆红
    # def OK():
    #     print("123")


@show
def test():
    print("test")

User.desc()
# User.OK()
print(1213)
test()

结果:
在这里插入图片描述

1.当前的@staticmethod就相当于一个装饰器

2.发现这个装饰器中返回的方法名,但是需要返回的结果为一个方法名

4.另外一个简化版的装饰器(可以传递参数)

# 使用当前的装饰器模式并传递当前的参数
def my_func(fun):
    def show(args):  # 使用参数的时候需要在内部的函数中声明参数
        print("开始执行方法")
        fun(args)  # 这样才可以调用当前的函数,并把参数传递过去
        print("调用方法后")

    return show  # 使用装饰器模式需要返回一个函数的名称


@my_func
def say(args):
    print("say方法被调用")
    print("args={}".format(args))


say("123")

结果:
在这里插入图片描述
1.发现传递参数的时候,装饰器中的参数名称不需要参数,但是装饰器内部的方法需要和被装饰的方法一致的参数数量,这样就可调用这个方法,并在装饰器中调用这个方法

2.注意当前的装饰器内部的方法,以及传递参数需要注意的地方

5.传递方法

# 使用当前的传递函数名称
def my_func(fun, args):
    return fun(args)


result = my_func(int, "1")
print("当前的结果为:{},当前返回的结果的类型为:{}".format(result, type(result)))


# 这里的操作是成功的,由于当前的int是一个类,但是这个类可以使用构造函数方式

class Use:
    def __init__(self, arg=""):
        print("arg=" + arg)


my_func(Use, "hello 函数式编程")

结果:

在这里插入图片描述

1.可以利用构造函数方式实现类型的转换

6.总结

=1.当前的装饰器就是方法内部套用方法,然后返回方法名即可,接收参数为函数

2.可以使用@+装饰器的名称将需要被装饰的方法扩展,一般相当于Java中的AOP

3.可以使用内建的函数方式实现对参数实现函数化操作

以上纯属个人见解,如有问题请联系本人!

发布了215 篇原创文章 · 获赞 39 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览