python 装饰器中的 self

2024-01-09

我想要一个装饰器将装饰函数添加到列表中,如下所示:

class My_Class(object):

    def __init__(self):
        self.list=[]

    @decorator
    def my_function(self)
       print 'Hi'

我希望将 my_function 添加到 self.list 中,但我无法编写这个装饰器。如果我尝试将其写入 My_Class 中,那么我将不得不使用 @self.decorator,并且 self 不存在,因为我们位于任何函数之外。如果我尝试将其写出 My_Class,那么我无法从 my_function 中检索 self。

我知道存在相当类似的问题,但它们过于复杂,而且我只是在学习 python 和装饰器。


您无法访问self来自装饰器,因为装饰器在定义函数时运行,并且当时没有 的实例My_Class yet.

最好将函数列表作为类属性而不是实例属性。然后你可以将此列表作为参数传递给装饰器:

def addToList(funcList):
    '''Decorator that adds the function to a given list'''
    def actual_decorator(f):
         funcList.append(f)
         return f
    return actual_decorator

class MyClass(object):
    funcList = []

    @addToList(funcList)
    def some_function(self, name):
        print 'Hello,', name

现在您可以访问MyClass.funcList获取修饰函数的列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 装饰器中的 self 的相关文章

  • 使用 setup.py 编译 python 应用程序

    我已经指出了将 pygame 导出到可执行文件以进行分发的问题 我仍然有一个问题 当我运行 setup py 我使用 python 版本 3 7 0 并构建应用程序时 应用程序直接崩溃 我也无法打开 unix 可执行文件 这正是我到目前为止
  • 无法构建具有 int 输入的 Keras 层

    我有一个复杂的 keras 模型 其中一层是自定义预训练层 需要 int32 作为输入 该模型作为继承自 Model 的类实现 其实现如下 class MyModel tf keras models Model def init self
  • Plotly:如何使用日期时间索引绘制中心有一条线的范围?

    我想绘制一条周围有范围的线 就像这张照片所示 我发布了一个原始问题 但没有指定索引是日期时间索引 我以为这并不重要 但我错了 有一个答案用数字索引覆盖它 Plotly 如何制作具有多条线和标准差阴影区域的图形 https stackover
  • 带权重的欧几里得距离

    我目前正在使用SciPy计算欧氏距离 dis scipy spatial distance euclidean A B 在哪里 A B是5维位向量 现在工作正常 但是如果我为每个维度添加权重 是否仍然可以使用 scipy 我现在拥有的 sq
  • 什么时候使用nonlocal关键字? [复制]

    这个问题在这里已经有答案了 我不明白为什么我可以在这里使用系列变量 def calculate mean series def mean new value series append new value total sum series
  • Python 替换嵌套 JSON 中的 None 值

    我一直在尝试替换下面 JSON 字典中的 None 值 我将如何遍历这个 json 并将 None 值替换为空字符串 我很难理解如何遍历嵌套 json 如果有人能帮我解决这个问题 我会很高兴 下面的嵌套 json 示例 或者在 python
  • Django 1.7 makemigrations 将表重命名为 None

    我必须将一些模型从一个应用程序移动到另一个应用程序 并且我按照此答案中的说明进行操作https stackoverflow com a 26472482 188614 https stackoverflow com a 26472482 1
  • 获取数据框列表并按变量分组,然后使用该变量作为字典的键

    我对 python 编程比较陌生 我有一个 pandas 数据框列表 其中都有 年份 列 我试图按该列进行分组并转换为字典 其中字典键是变量 年份 值是该年的数据帧列表 这在Python中可能吗 我试过这个 grouped dict lis
  • 如何在python中将纬度经度转换为十进制?

    假设我有以下内容 latitude 20 55 70 010N longitude 32 11 50 000W 转换为十进制形式最简单的方法是什么 有图书馆吗 从秒形式转换会更简单吗 149520 220N 431182 897W 为了处理
  • 如何在Python中使用x和y坐标验证ES384 JWT签名

    我有一个 JWT 如下 Authorization Bearer eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCIsImtpZCI6IjQ0ODIzZjNkLTBiMDEtNGE2Yy1hODBlLWI5ZDNlOGE
  • Python中定义类变量时如何引用类方法?

    我有以下类和类变量 class MyClass class var 1 a class var 2 run class method classmethod def run class method cls return ran class
  • 可以在 __getitem__ 上使用多个参数吗?

    我正在尝试使用 getitem self x y 在我的 Matrix 类上 但在我看来它不起作用 我仍然不太了解如何使用 python 我这样称呼它 print matrix 0 0 是否有可能使用多个参数 谢谢 也许我可以只使用一个参数
  • 如何根据 pandas 列注释散点图中的点

    Wanted Age 作为 x 轴 Pos 作为 y 轴 标签为 Player 名字 但由于某种原因 无法对点进行标记 Code import numpy as np import matplotlib pyplot as plt impo
  • PyQt5:如何将 QPushButton 连接到插槽?

    好吧 几乎所有教程 可理解的用人类语言编写的文档都是针对 PyQt4 的 但是 PyQt5 改变了整个 将按钮连接到插槽 的工作方式 但我仍然不知道如何做到这一点 我在 QtDesigner 中做了一个快速 gui 并且有一个 QPushB
  • 如何在plotly dash应用程序中编写数学符号?

    我想在绘图破折号应用程序中绘制数学符号 例如 我尝试过这个 import dash import dash html components as html app dash Dash name app layout html Div chi
  • 包含多个双引号的 CSV 拆分正则表达式

    我有一个包含文本的 CSV 列数据 每行用双引号分隔 一行中的示例文本类似于此 notice 新行和每行之前的空格是故意的 Lorem ipsum dolor sit amet consectetur adipisicing elit se
  • 我可以在 python 中获得没有 echo 的控制台输入吗?

    我可以在 python 中获取没有 echo 的控制台输入吗 Use getpass http docs python org library getpass html gt gt gt from getpass import getpas
  • Python 3 Tkinter 菜单小部件的回调似乎不按顺序

    我在使用 Tkinter 时遇到问题Menu小部件 没有菜单按钮 因此回调似乎不按顺序运行 这里有一个very最小的例子 Python 3 6 5 Windows 7 x64 from tkinter import root Tk popu
  • 如何使用 numpy 将向量填充和/或截断为指定长度?

    我有几个清单 a 1 2 3 b 1 2 3 4 5 6 其长度可变 我想返回一个长度为 5 的向量 这样如果输入列表长度 5 那么它将在第 5 个元素处被截断 例如 输入a会回来np array 1 2 3 0 0 并输入b会回来np a
  • set()是如何实现的?

    我见过有人这么说setpython 中的对象具有 O 1 成员资格检查 他们如何在内部实施以实现这一点 它使用什么类型的数据结构 该实施还有哪些其他影响 这里的每个答案都非常有启发性 但我只能接受一个 所以我将选择最接近我原来问题的答案 谢

随机推荐