python-3.x - 在子类中调用继承的类方法装饰器
问题描述
在这里,我有一个带有精美装饰器的基类:
import functools
class Model:
def connect(func):
"""Handles opening and closing of connection. Uses functools to preserve docstring of wrapped function."""
@functools.wraps(func)
def wrapper(*args, **kwargs):
try:
#stuff
except Exception as e:
raise e
return result
return wrapper
@connect
def get_tables(self):
"""return a list a tables"""
pass
这是 Child 类:
class ChildModel(Model):
def __init__(self, **kwargs):
for k in kwargs:
setattr(self, k, kwargs[k])
@Model.connect
def foo(self):
pass
看来我必须打电话@Model.connect
而不是@connect
我得到NameError: name 'connect' is not defined
,所以有没有办法使用 just @connect
?
解决方案
不,几乎因为当前范围只是globals
...
你可以这样做:
class ChildModel(Model):
connect = Model.connect
另一种方式,您不必放入 connect Model
,只需将其设为全局函数即可。
推荐阅读
- ios - 为什么 UIButton 不返回正确的约束?
- java - Java,尝试根据命令长度创建特定的网络字节头
- intellij-idea - IntelliJ IDEA 快捷键切换2个字
- python - 当我使用 .append 时,MongoDB 每次第二次插入 null
- python - 无法正确下载嵌套表[编辑]
- python - 舍入Series中的值时出现decimal.InvalidOperation错误
- perl - 我使用 LWP::UserAgent 使用 cookie 有什么问题?
- c# - 可编辑组合框无上下文菜单
- regex - 忽略 Powershell RegEx 上的换行符
- vba - 文件重命名期间的 vba 运行时错误 75