Неясно, почему вы хотели бы сделать что-то подобное создать свойство с сеттер, который игнорирует его значение аргумента, но ответ «Да», вы можете сделать это путем создания функции, которая возвращает обычай property
объекта:
Однако вы не можете использовать синтаксис @
для его применения. Вместо этого вы должны использовать его, как показано ниже:
def attribute_property(name, input_value):
STORAGE_NAME = '_' + name
@property
def prop(self):
return getattr(self, STORAGE_NAME)
@prop.setter
def prop(self, ignored):
setattr(self, STORAGE_NAME, input_value)
return prop
# EXAMPLE USAGE
class Person(object):
name = attribute_property('name', 'Monty')
def __init__(self, name, age):
self.name = name # ignores value of passed "name" argument!
self.age = age
user = Person('Rodrigo', 42)
print('user.name: {!r}'.format(user.name))
print('user.age: {!r}'.format(user.age))
Выход:
user.name: 'Monty'
user.age: 42
Minor опечатка: 'self.name - name' должен быть' self.name = name', верно? – MSeifert