面试题答案
一键面试def move_decorator(func):
def wrapper(self):
print("Dog is moving")
func(self)
print("Dog has moved")
return wrapper
class Animal:
def move(self):
print("Animal is moving")
class Dog(Animal):
@move_decorator
def move(self):
super().move()
# 测试
dog = Dog()
dog.move()
解释:
- 定义了一个装饰器
move_decorator
,它接受一个函数func
作为参数,返回一个新的函数wrapper
。在wrapper
函数中,先打印Dog is moving
,然后调用原函数func
,最后打印Dog has moved
。 Animal
类是基类,包含move
方法。Dog
类继承自Animal
类,并重写了move
方法。使用@move_decorator
装饰器对Dog
类的move
方法进行装饰。- 在
Dog
类的move
方法中,通过super().move()
调用父类Animal
的move
方法,这样既保留了继承体系中的原有行为,又通过装饰器添加了特定行为,同时避免了因为继承关系产生冲突。