foo = "bar"
Хочу деприкейтнуть MyClass.foo
Сделать хук в get?
import warnings class deprecatedattr: def __init__(self, value): self.value = value def __set_name__(self, owner, name): self.name = name def __get__(self, *a): warnings.warn( f"Attribute `{self.name}` is deprecated", DeprecationWarning, stacklevel=2, ) return self.value class MyClass: foo = deprecatedattr("bar") print(MyClass.foo)
Так и подумал. А разве дрючить класс и геттеры не будет дороже чем просто использовать функцию?
Всё то же самое, только обернуть "bar" не в класс, а в функцию
попробуй и сравни поведение
Всмысле, «функция, которая в __get__»?
def deprecatedattr(value, *args, **kwargs): """ Возвращает переменную и вызывает warnings.warn с args и kwargs """ warnings.warn( *args, **kwargs ) return value class MyClass: foo = deprecatedattr("bar", "deprecated, use another method", DeprecationWarning, stacklevel=2,)
Так ворнинг будет при иницизации модуля, а не при успользовании атрибута
эм... это работает при создании класса а не при обращении к атрибуту
Обсуждают сегодня