Is there a way to make a python class such that,
a = Foo()
a.user.details.money.pay = 130000
print(a.user.details.money.pay)
outputs 130000
If possible, could you also explain the class?
CodePudding user response:
Python calls __getattr__ when it can't find an attribute on an object. Your class could use that to assign a new instance of itself to the attribute. Now you have a named attribute that will play the same game for the next attribute down the line.
class Foo:
def __getattr__(self, name):
setattr(self, name, foo:=Foo())
return foo
a = Foo()
a.user.details.money.pay = 130000
print(a.user.details.money.pay)
Here, a.__getattr__ creates user, a.user.__getattr__ creates details, and etc. Since this is an assignment operation, that last component, pay, is a __setattr__ operation, not a __getattr__, so your custom getter doesn't run.
This can mask bugs as this class will create unintended attributes as well.
