装饰成两个 类

decorating in two classes

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

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'。

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

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

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