gpt4 book ai didi

python - Python中的子类可以继承父类装饰器吗

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:02 27 4
gpt4 key购买 nike

如果我将装饰器应用于类:

from flask.ext.restful import Resource

@my_decorator()
class Foo(Resource): ...

它会自动应用于任何子类方法吗?例如,它会神奇地应用于a_foobar_method吗?

class FooBar(Foo):

def a_foobar_method(self):
...

最佳答案

简而言之,没有。

@my_decorator
class Foo(Resource): ...

只是

的简写
class Foo(Resource): ...
Foo = my_decorator(Foo)

如果您使用 Foo 的唯一一次是定义 FooBar,那么您的两段代码就等同于:

class Foo(Resource): ...
Foo_decorated = my_decorator(Foo)
class FooBar(Foo_decorated):
def a_foobar_method(self):
...

甚至这样:

class Foo(Resource): ...
class FooBar(my_decorator(Foo)):
def a_foobar_method(self):
...

真正的答案取决于装饰器的作用。原则上,如果在类被实例化为对象后查看方法列表,它就有机会看到 FooBar 的方法(例如,因为它修改了 __init__方法)。但是,如果它在调用时遍历方法并对每个方法应用一些更改,那么它将不会影响 FooBar 中的额外方法(或替换方法)。

关于python - Python中的子类可以继承父类装饰器吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40002241/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com