Другие уже указывали на это: избегайте использования сеттеров и геттеров и используйте простой доступ к атрибутам, если вам не нужно выполнять дополнительную логику при получении / установке вашего атрибута.Если вам нужна эта дополнительная логика, тогда используйте свойства.
Если у вас много параметров для передачи инициализатору экземпляра, рассмотрите возможность использования отдельного объекта или словаря, содержащего все параметры:
>>> class User(object):
... def __init__(self, params):
... self.__dict__.update(params)
...
>>> params = {
... 'username': 'john',
... 'password': 'linebreak',
... }
>>> user = User(params)
>>> user.username
'john'
>>> user.password
'linebreak'
PS В вашемЕсли вам не нужно объявлять свои атрибуты на уровне класса.Обычно это делается, если вы хотите использовать одно и то же значение для всех экземпляров класса:
>>> class User(object):
... type = 'superuser'
...
>>> user = User()
>>> user2 = User()
>>>
>>> user.type
'superuser'
>>> user2.type
'superuser'
>>>
>>> user2.type = 'instance superuser'
>>>
>>> user.type
'superuser'
>>> user2.type
'instance superuser'
>>> User.type
'superuser'