Consider the following example:
class A:
@property
def x(self): return 5
So, of course calling the a = A(); a.x will return 5
But imagine that you want to be able to modify the property x.
This way, for example:
class A:
@property
def x(self, neg = False): return 5 if not neg else -5
And call it with a = A(); a.x(neg=True)
That will raise a TypeError: 'int' object is not callable, that is quite normal, since our x is evaluated as 5.
So, I would like to know how one can pass more then one argument to the property getter, if it is possible at all.
Note that you don’t have to use
propertyas a decorator. You can quite happily use it the old way and expose the individual methods in addition to the property:This may or may not be a good idea depending on exactly what you’re doing with it (but I’d expect to see an excellent justification in a comment if I came across this pattern in any code I was reviewing)