Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс Property
. У класса должен быть следующий интерфейс:
from __future__ import annotations
from collections.abc import Callable
from typing import Any, Generic, TypeVar
C = TypeVar('C')
class Property(Generic[C]):
def __init__(self, getter: Callable[[C], Any] | None = None,
setter: Callable[[C, Any], None] | None = None,
deleter: Callable[[C], None] | None = None,
doc: str | None = None,
default_value: list[Any] | None = None):
'''Property decorator, supporting getting, setting, deleting handled property.
Generic:
C: the class property is setup for
Arguments:
getter: member function that handles getting the value
setter: member function that handles setting the value
deleters: member function that handles deleting the value
doc: general documentation for the property
default_value: if setter is not None calls it with `default_value` on object initialization'''
pass
def getter(self, getter: Callable[[C], Any]) -> Property[C]:
'''Adds getter to the property
Arguments:
getter: member function that handles getting the value
Returns:
A copy of Property with updated getter value'''
pass
def setter(self, setter: Callable[[C, Any], None] | None = None, default_value: Any | None = None) -> Property[C] | Callable[[Callable[[C, Any], None]], Property[C]]:
'''Adds setter to the property
Arguments:
setter: member function that handles setting the value
default_value: a value that is passed to `setter` on object initialization
Returns:
If `setter` is None returns a shorthand decorator function with set `default_value`.
If `setter` is not None returns a copy of Property with updated setter and default_value arguments'''
pass
def deleter(self, deleter: Callable[[C], None]) -> Property:
'''Adds deleter to the property
Arguments:
deleter: member function that handles deleting the value
Returns:
A copy of Property with updated deleter value'''
pass
Класс должен повторять функционал стандартного property
языка Python: позволять создавать свойства с установленными setter
, getter
, deleter
и бросающий исключение AttributeError
при попытке использования неустановленного метода со следующими сообщениями
'Cannot read {name}'
,'Cannot set {name}
,'Cannot delete {name}
,name
это имя свойства, по которому оно доступно в классе.
В дополнение к этому появление такого свойства в классе должно после инициализации объекта добавлять к нему поле '_{name}'
со значением None
и единожды вызывать setter
объекта со значением default_value
, если свойство поддерживает присваивание.
Документация для свойства должна состоять из максимум 5-ти частей
"Property '{name}' on class {cls_name}"
, где cls_name
имя класса, в который добавлено свойство.doc
, указанный при инициализации свойства, если он не равен None
.getter
, если свойство поддерживает получение значения.setter
, если свойство поддерживает присваивание.deleter
, если свойство поддерживает удаление.Код решения должен содержать только импортируемые модули, определение и реализацию класса.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|