MST

星途 面试题库

面试题:Python中*args和**kwargs在元类中的复杂应用

定义一个元类Meta,使用*args和**kwargs来控制类的创建过程。当创建一个使用该元类的类时,如果在类定义时通过关键字参数指定了 'validate' 为True,那么该类的所有实例属性在设置时都需要进行类型检查(假设所有属性都应为整数类型),否则不进行类型检查。请详细实现这个元类以及使用该元类的示例类。
37.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class Meta(type):
    def __new__(cls, name, bases, attrs, **kwargs):
        if kwargs.get('validate'):
            def __setattr__(self, key, value):
                if not isinstance(value, int):
                    raise TypeError(f"Expected int for attribute {key}, got {type(value)}")
                super().__setattr__(key, value)
            attrs['__setattr__'] = __setattr__
        return super().__new__(cls, name, bases, attrs)


class ExampleClass(metaclass=Meta, validate=True):
    pass


# 测试
obj = ExampleClass()
obj.attr = 10  # 正常
try:
    obj.attr = "not an int"  # 会抛出TypeError
except TypeError as e:
    print(e)