class PositiveIntegerMeta(type):
def __new__(mcs, name, bases, attrs):
def setattr_wrapper(self, key, value):
if key in ['specific_attr'] and not isinstance(value, int) or value <= 0:
raise ValueError("属性值必须为正整数")
super().__setattr__(key, value)
attrs['__setattr__'] = setattr_wrapper
return super().__new__(mcs, name, bases, attrs)
class MyClass(metaclass=PositiveIntegerMeta):
specific_attr = 1
# 应用场景:
1. **数据库映射**:在ORM(对象关系映射)框架中,对于映射到数据库表字段的类属性,通过元类控制属性修改时的验证。例如,数据库中的自增ID字段,在类中作为属性,通过元类确保对其修改符合数据库的约束(正整数),避免错误的数据插入或更新。
2. **配置管理**:在项目的配置类中,一些配置参数可能有特定的取值范围。使用元类可以在配置参数被修改时进行验证,确保配置的正确性,防止因错误的配置导致系统异常。
3. **数据建模**:在数据科学或机器学习项目中,对于数据模型类的属性,通过元类控制修改,保证属性值符合数据的要求,比如特征值必须为正整数等,有助于数据的预处理和模型训练的稳定性。