【问题标题】:How to use a decorators on class members? [duplicate]如何在班级成员上使用装饰器? [复制]
【发布时间】:2020-05-11 19:57:17
【问题描述】:

我正在尝试编写一个烧瓶服务器类,但在装饰器方法上出现错误。

class Server:
    def __init__(self, port):
        self.server = flask.Flask(__name__)
        self.port = port


    @self.server.route("/isRunning/<int:index>/")
    def isRunning(self, index):
        while (not self.running):
            time.sleep(0.5)

        return "Ok"


    def run(self):
        self.server.run(host="localhost", port=self.port)


a = Server(5000)
a.run()
  File "Server.py", line 20, in Server 
     @self.server.route("/login/<string:name>/<int:r>/<int:g>/<int:b>/")
NameError: name 'self' is not defined

我猜测装饰器无法访问此实例。这样做的正确方法是什么?

【问题讨论】:

    标签: python class flask python-decorators


    【解决方案1】:

    不要将route 用作装饰器,而是用作要调用的简单函数。

    class Server:
        def __init__(self, port):
            self.server = flask.Flask(__name__)
            self.port = port
            self.server.route("/isRunning/<int:index>/")(self.isRunning)
    
        def isRunning(self, index):
            while (not self.running):
                time.sleep(0.5)
            return "OK"
    
        def run(self):
            self.server.run(host="localhost", port=self.port)
    
    a = Server(5000)
    a.run()

    (也请注意,在Server.run 中,对app 的引用应该是对self.server 的引用。)

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 2016-01-13
      • 2021-03-17
      • 2014-06-07
      • 2015-07-23
      • 2021-05-19
      • 2020-10-20
      • 1970-01-01
      • 2015-08-13
      相关资源
      最近更新 更多