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 property
as a decorator. You can quite happily use it the old way and expose the individual methods in addition to the property:
class A:
def get_x(self, neg=False):
return -5 if neg else 5
x = property(get_x)
>>> a = A()
>>> a.x
5
>>> a.get_x()
5
>>> a.get_x(True)
-5
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)