【问题标题】:decorating in two classes装饰在两个班级
【发布时间】:2021-03-17 11:51:47
【问题描述】:

我不擅长 python 中的装饰器,但我正在努力学习它。 我有两个类,我想用“装饰”类中的方法“_f”来装饰“问候”类中的一个方法。代码是这样的:

class greeting:
    def __init__(self,word):
        self.word=word
    @f._f
    def hi(self):
        print('hi')
    def bye(self):
        print('bye')

class f(object):
    def _f(foo):
        def display_wrapper (self):
            print('it is a decorator')
            self._g(self)
            foo(self)
        return display_wrapper
    def _g(self):
        print('a method in decorator')

word='hiiii'
obj=greeting(word)
print(obj.hi())

但是会出现这样的错误: 它是一个装饰器 AttributeError: 'greeting' 对象没有属性 '_g'。

如果有人知道问题出在哪里,请告诉我

【问题讨论】:

  • 其中一个问题是没有f的实例可以调用_g()。
  • f 的实例是 obj.hi,而不是 obj(这是 greeting.hi 接收的 self 参数)。
  • f._f 实例的f._g 调用。但是greetings没有._g的功能
  • 非常感谢。你能修改我的代码吗?因为我不知道如何解决它

标签: python class inheritance decorator attributeerror


【解决方案1】:

此版本适用于某些作品的定义。

class f(object):
    def _f(foo):
        def display_wrapper (self):
            print('it is a decorator')
            f._g()
            foo(self)
        return display_wrapper
    @classmethod
    def _g(cls):
        print('a method in decorator')

class greeting:
    def __init__(self,word):
        self.word=word
    @f._f
    def hi(self):
        print('hi')
    def bye(self):
        print('bye')



word='hiiii'
obj=greeting(word)
print(obj.hi())

输出:

it is a decorator
a method in decorator
hi
None

【讨论】:

  • 非常感谢。我真的很感激
猜你喜欢
  • 2010-10-15
  • 2016-01-13
  • 2015-08-13
  • 2021-05-19
  • 1970-01-01
  • 2018-01-16
  • 2020-10-20
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多