Property getter, setter and deleter methods are called by the python interpreter with a specific number or arguments:
- only "self" for property getter and deleter methods.
- "self" and a value for setter methods.
Adding any other parameter, or removing these mandatory parameters will make method calls fail.
This rule raises an issue when:
- too many parameters are defined in a property getter, setter or deleter method.
- the value parameter is missing in a property setter method.
Noncompliant Code Example
class A:
@property
def foo(self, unexpected, unexpected2): # Noncompliant. Too many parameters.
return self._foo
@foo.setter
def foo(self, value, unexpected): # Noncompliant. Too many parameters.
self._foo = value
@foo.deleter
def foo(self, unexpected): # Noncompliant. Too many parameters.
del self._foo
class B:
def get_foo(self, unexpected): # Noncompliant. Too many parameters.
return self._foo
def set_foo(self, value, unexpected): # Noncompliant. Too many parameters.
self._foo = value
def del_foo(self, unexpected): # Noncompliant. Too many parameters.
del self._foo
foo = property(get_foo, set_foo, del_foo, "'foo' property.")
Compliant Solution
class A:
@property
def foo(self):
return self._foo
@foo.setter
def foo(self, value):
self._foo = value
@foo.deleter
def foo(self):
del self._foo
class B:
def get_foo(self):
return self._foo
def set_foo(self, value):
self._foo = value
def del_foo(self):
del self._foo
foo = property(get_foo, set_foo, del_foo, "'foo' property.")
See