MST

星途 面试题库

面试题:Python面向对象编程中if语句在元类与描述符中的深度实践

定义一个元类`MetaIf`,当使用该元类创建类时,类中的每个方法如果名称以`conditional_`开头,那么这个方法的执行需要根据类的某个特定属性值(例如`condition_flag`)通过`if`语句来决定是否执行。同时,为这个类定义一个描述符`ConditionDescriptor`,用于控制`condition_flag`属性的读写,并在描述符的`__set__`方法中,使用`if`语句来验证新设置的值是否符合特定规则(比如只能是布尔值)。请给出完整的元类、描述符以及使用元类和描述符的类的代码实现。
20.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class ConditionDescriptor:
    def __init__(self):
        self.value = None

    def __get__(self, instance, owner):
        return self.value

    def __set__(self, instance, value):
        if not isinstance(value, bool):
            raise ValueError("condition_flag只能设置为布尔值")
        self.value = value


def meta_if(cls_name, bases, attrs):
    def new_func(func):
        def wrapper(self, *args, **kwargs):
            if getattr(self, 'condition_flag'):
                return func(self, *args, **kwargs)
            return None
        return wrapper

    for name, value in attrs.items():
        if callable(value) and name.startswith('conditional_'):
            attrs[name] = new_func(value)
    return type(cls_name, bases, attrs)


MetaIf = meta_if


class MyClass(metaclass=MetaIf):
    condition_flag = ConditionDescriptor()

    def conditional_method(self):
        print("执行conditional_method")