面试题答案
一键面试- 执行顺序和作用范围分析:
- 类装饰器在类定义时就会执行。当定义
BaseClass
时,baseDecorator
会首先执行,它作用于BaseClass
,可以对BaseClass
进行一些修改,比如添加属性、方法等。 - 当定义
SubClass
时,subDecorator
会执行,它作用于SubClass
。SubClass
继承自BaseClass
,所以SubClass
已经是被baseDecorator
装饰后的BaseClass
的子类。 - 在实例化
SubClass
时,先执行baseDecorator
对BaseClass
的装饰逻辑,再执行subDecorator
对SubClass
的装饰逻辑。
- 类装饰器在类定义时就会执行。当定义
- 代码示例:
def baseDecorator(cls):
print("baseDecorator is called on BaseClass")
setattr(cls, 'base_attr', 'from base decorator')
return cls
def subDecorator(cls):
print("subDecorator is called on SubClass")
setattr(cls,'sub_attr', 'from sub decorator')
return cls
@baseDecorator
class BaseClass:
pass
@subDecorator
class SubClass(BaseClass):
pass
sub_obj = SubClass()
print(sub_obj.base_attr)
print(sub_obj.sub_attr)
在上述代码中:
- 运行代码时,首先会输出
baseDecorator is called on BaseClass
,这是因为在定义BaseClass
时baseDecorator
被调用。 - 接着输出
subDecorator is called on SubClass
,这是在定义SubClass
时subDecorator
被调用。 - 实例化
SubClass
后,可以通过实例访问到base_attr
和sub_attr
,分别验证了两个装饰器的作用。