class ValidatorMeta(type):
def __new__(mcs, name, bases, attrs):
assert 'x' not in attrs, "Using properties isn't allowed"
assert '__setattr__' not in attrs, "Using __setattr__ isn't allowed"
return super().__new__(mcs, name, bases, attrs)
class SomeClass(metaclass=ValidatorMeta):
@property
def __dict__(self):
return {'y': 5}
obj = SomeClass()
obj.x = 3
obj.y = 5
assert vars(obj) == {'y': 5}
print('You win!')
Y2xhc3MgVmFsaWRhdG9yTWV0YSh0eXBlKToKICAgIGRlZiBfX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGF0dHJzKToKICAgICAgICBhc3NlcnQgJ3gnIG5vdCBpbiBhdHRycywgIlVzaW5nIHByb3BlcnRpZXMgaXNuJ3QgYWxsb3dlZCIKICAgICAgICBhc3NlcnQgJ19fc2V0YXR0cl9fJyBub3QgaW4gYXR0cnMsICJVc2luZyBfX3NldGF0dHJfXyBpc24ndCBhbGxvd2VkIgogICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18obWNzLCBuYW1lLCBiYXNlcywgYXR0cnMpCiAKY2xhc3MgU29tZUNsYXNzKG1ldGFjbGFzcz1WYWxpZGF0b3JNZXRhKToKICAgIEBwcm9wZXJ0eQogICAgZGVmIF9fZGljdF9fKHNlbGYpOgogICAgICAgIHJldHVybiB7J3knOiA1fQogCm9iaiA9IFNvbWVDbGFzcygpCm9iai54ID0gMwpvYmoueSA9IDUKYXNzZXJ0IHZhcnMob2JqKSA9PSB7J3knOiA1fQpwcmludCgnWW91IHdpbiEnKQ==