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")