У меня есть атрибут экземпляра, который я сделал свойством с помощью декоратора Python property
.
Затем я создал сеттер для свойства с помощью декоратора @property_name.setter
.
Как я могу получить __qualname__
исходного определения метода, украшенного @property.setter
?
Где я искал
- Python: __qualname__ of function with decorator
- I don't think
property
uses@functools.wraps()
- I don't think
- Python @property.setter
- I realize
property
is actually adescriptor
- I realize
- Decorating a class method after @property
- Tells me I may want to use
__get__
, but I can't figure out the syntax
- Tells me I may want to use
Пример кода
Это было написано в Python 3.6
.
#!/usr/bin/env python3
def print_qualname():
"""Wraps a method, printing its qualified name."""
def print_qualname_decorator(func):
# print(f"func = {func} and dir(): {dir(func)}")
if hasattr(func, "__qualname__"):
print(f"Qualified name = {func.__qualname__}.")
else:
print("Doesn't have qualified name.")
return print_qualname_decorator
class SomeClass:
def __init__(self):
self._some_attr = 0
self._another_attr = 0
@property
def some_attr(self) -> int:
return self._some_attr
@print_qualname()
@some_attr.setter
def some_attr(self, val: int) -> None:
self._some_attr = val
@print_qualname()
def get_another_attr(self) -> int:
return self._another_attr
Выход:
Doesn't have qualified name.
Qualified name = SomeClass.get_another_attr.
Как я могу получить __qualname__
для some_attr
из декоратора print_qualname
? Другими словами, как мне вывести SomeClass.some_attr
?