【发布时间】:2020-04-06 07:32:21
【问题描述】:
我有一个实例属性,我使用 Python 的 property 装饰器创建了一个属性。
然后我使用装饰器 @property_name.setter 为该属性创建了一个 setter。
我怎样才能得到原始方法定义的__qualname__,用@property.setter装饰?
我看过的地方
-
Python: __qualname__ of function with decorator
- 我不认为
property使用@functools.wraps()
- 我不认为
-
Python @property.setter
- 我意识到
property实际上是一个descriptor
- 我意识到
-
Decorating a class method after @property
- 告诉我我可能想使用
__get__,但我不知道语法
- 告诉我我可能想使用
示例代码
这是写在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.
如何从 print_qualname 装饰器中获取 __qualname__ 的 some_attr?换句话说,如何输出SomeClass.some_attr?
【问题讨论】:
标签: python properties python-decorators descriptor python-descriptors