MST

星途 面试题库

面试题:TypeScript装饰器模式在类继承中的应用

假设有一个基类`Animal`,包含方法`move`,现在有一个子类`Dog`继承自`Animal`并重写了`move`方法。请使用装饰器模式在`Dog`类的`move`方法调用前后添加特定的行为,比如打印`Dog is moving`和`Dog has moved`,并且要考虑如何让装饰器在继承体系中正确工作,不会因为继承关系而产生冲突。
19.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
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()

解释:

  1. 定义了一个装饰器move_decorator,它接受一个函数func作为参数,返回一个新的函数wrapper。在wrapper函数中,先打印Dog is moving,然后调用原函数func,最后打印Dog has moved
  2. Animal类是基类,包含move方法。
  3. Dog类继承自Animal类,并重写了move方法。使用@move_decorator装饰器对Dog类的move方法进行装饰。
  4. Dog类的move方法中,通过super().move()调用父类Animalmove方法,这样既保留了继承体系中的原有行为,又通过装饰器添加了特定行为,同时避免了因为继承关系产生冲突。