props={}
def myProp(fn):
props[fn.__name__]=fn
class test():
def __init__(self):
self.x=5
def __getattribute__(self, name):
if name in props.keys():
return props[name](self)
return object.__getattribute__(self, name)
def __delattribute__(self, name):
if name in props.keys():
del props[name]
return
object.__delattribute__(self, name)
def __setattr__(self, name, value):
if name in props.keys():
return props[name](self, value)
return object.__setattr__(self, name, value)
@myProp
def myfunc(self, value=None):
if value:
self.x=value*2
return self.x-2
x= test()
print(x.myfunc)
x.myfunc=6
print(x.myfunc)
cHJvcHM9e30KZGVmIG15UHJvcChmbik6CiAgICBwcm9wc1tmbi5fX25hbWVfX109Zm4KCmNsYXNzIHRlc3QoKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLng9NQogICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6CiAgICAgICAgaWYgbmFtZSBpbiBwcm9wcy5rZXlzKCk6CiAgICAgICAgICAgIHJldHVybiBwcm9wc1tuYW1lXShzZWxmKQogICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQogICAgZGVmIF9fZGVsYXR0cmlidXRlX18oc2VsZiwgbmFtZSk6CiAgICAgICAgaWYgbmFtZSBpbiBwcm9wcy5rZXlzKCk6CiAgICAgICAgICAgIGRlbCBwcm9wc1tuYW1lXQogICAgICAgICAgICByZXR1cm4KICAgICAgICBvYmplY3QuX19kZWxhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQogICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKICAgICAgICBpZiBuYW1lIGluIHByb3BzLmtleXMoKToKICAgICAgICAgICAgcmV0dXJuIHByb3BzW25hbWVdKHNlbGYsIHZhbHVlKQogICAgICAgIHJldHVybiBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpCgogICAgQG15UHJvcAogICAgZGVmIG15ZnVuYyhzZWxmLCB2YWx1ZT1Ob25lKToKICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgc2VsZi54PXZhbHVlKjIKICAgICAgICByZXR1cm4gc2VsZi54LTIKCng9IHRlc3QoKQpwcmludCh4Lm15ZnVuYykKeC5teWZ1bmM9NgpwcmludCh4Lm15ZnVuYyk=