簡體   English   中英

如何將裝飾器應用於子類中的超類方法?

[英]How can I apply decorator to a superclass method in a subclass?

說,我們有以下情況,

class A():
    def something():
        ...
        ...
        ...


class B(A):
    def use_something():
        ...
        ...
        # Now, at this point I want something() to be decorated with a 
        # decorator. But, since it is already defined in base class, 
        # I am not getting how to decorate it here, in the subclass.
        self.something()
        ...
        ...

現在,在B類中,我想使用A類中的something(),但我想為其應用裝飾器。 我無法在A類中進行裝飾,因為我想在不同的地方應用不同的裝飾器。 比方說,C(A)類,我也想在此處使用其他裝飾器使用something()。

因此,回到原來的問題; 如何在子類中將裝飾器應用於超類的方法?

您可以在這里(使用params和不使用params):

def simple_dec(func):
    def wrapped(*args, **kwargs):
        return 'No way'
    return wrapped


def simple_dec_params(first_param, second_param):
    def dec(func):
        def wrapped(*args, **kwargs):
            return '{} {}'.format(first_param, second_param)
        return wrapped
    return dec


class A():
    def something(self):
        print 'Something'


class B(A):
    def use_something(self):
        first_param = 'No'
        second_param = 'Way'
        print simple_dec(self.something)()
        print simple_dec_params(first_param, second_param)(self.something)()


b = B()
b.use_something()

有什么特殊原因導致您不能僅僅覆蓋something()嗎?

class A():
    def something(self):
        ...

class B(A):
    def use_something(self):
        ...
        self.something()
        ...

    def something(self):
        # Do "decorator" stuff
        super().something()
        # Do more "decorator" stuff

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM