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)