python 类内部装饰器的实现

发布于 2022-09-05 05:55:02 字数 1070 浏览 16 评论 0

学习装饰器的知识,想在类内部,实现一个装饰器

from functools import wraps
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('{} created!'.format(self.name))


    def freestyle(self, func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            print('Yo Yo, this is my freestyle!')
            func(*args, **kwargs)
            print('Yo Yo end of my freestyle!')
        return wrapper


    @freestyle
    def self_introduce(self, style):
        print('my name is: {}'.format(self.name))
        print('I am {} years old'.format(self.age))
        print('My style: {}'.format(style))




def main():
    p1 = Person('Jack', 10)
    p1.self_introduce('jazz')


if __name__ == '__main__':
    main()

报错:

Traceback (most recent call last):
  File "learn_decorator.py", line 2, in <module>
    class Person:
  File "learn_decorator.py", line 18, in Person
    @freestyle
TypeError: freestyle() takes exactly 2 arguments (1 given)

应该怎么实现呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

落叶缤纷 2022-09-12 05:55:02

哈哈,看到你这么幽默我都想笑。
def freestyle(func):
试试

信仰 2022-09-12 05:55:02

@freestyle(self=1)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文