MST

星途 面试题库

面试题:Python函数参数与元类结合的深度应用

定义一个元类,该元类能够检查其所创建类中的方法参数是否符合特定规则。例如,类中的某个方法必须接受特定名称和类型的参数。假设类定义如下: ```python class MyClass(metaclass = 你定义的元类): def my_method(self, param: int): pass ``` 要求实现这个元类,确保 `my_method` 的 `param` 参数类型为 `int`,如果不符合则抛出适当的异常。阐述在这个过程中,函数参数检查是如何与元类机制协同工作的。
24.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
def check_param_type(func):
    def wrapper(self, param):
        if not isinstance(param, int):
            raise TypeError("param must be of type int")
        return func(self, param)
    return wrapper


class MyMeta(type):
    def __new__(cls, name, bases, attrs):
        if'my_method' in attrs:
            attrs['my_method'] = check_param_type(attrs['my_method'])
        return super().__new__(cls, name, bases, attrs)


class MyClass(metaclass=MyMeta):
    def my_method(self, param):
        pass

在这个过程中,元类 MyMeta__new__ 方法在创建 MyClass 类对象时被调用。在 __new__ 方法中,检查 MyClass 类属性中是否有名为 my_method 的方法。如果存在,使用 check_param_type 装饰器对该方法进行包装。check_param_type 装饰器在 my_method 方法被调用时,检查传入的 param 参数是否为 int 类型,若不是则抛出 TypeError 异常。这样就实现了函数参数检查与元类机制的协同工作,在类创建时就对方法参数检查逻辑进行了设置。