当前位置: 首页 > 面试题库 >

Bottle方法框架和OOP,使用方法代替函数

万俟鸿波
2023-03-14
问题内容

我已经用Bottle完成了一些编码。这真的很简单,可以满足我的需求。但是,当我尝试将应用程序包装到一个类中时,我很固执:

import bottle
app = bottle

class App():
    def __init__(self,param):
        self.param   = param

    # Doesn't work
    @app.route("/1")
    def index1(self):
        return("I'm 1 | self.param = %s" % self.param)

    # Doesn't work
    @app.route("/2")
    def index2(self):
        return("I'm 2")

    # Works fine
    @app.route("/3")
    def index3():
        return("I'm 3")

是否可以在Bottle中使用方法而不是函数?


问题答案:

您的代码不起作用,因为您尝试路由到非绑定方法。非绑定方法没有对的引用self,如果App尚未创建的实例,怎么办?

如果要路由到类方法,则首先必须初始化类,然后再初始化bottle.route()到该对象上的方法,如下所示:

import bottle

class App(object):
    def __init__(self,param):
        self.param   = param

    def index1(self):
        return("I'm 1 | self.param = %s" % self.param)

myapp = App(param='some param')
bottle.route("/1")(myapp.index1)

如果要在处理程序附近添加路由定义,可以执行以下操作:

def routeapp(obj):
    for kw in dir(app):
        attr = getattr(app, kw)
        if hasattr(attr, 'route'):
            bottle.route(attr.route)(attr)

class App(object):
    def __init__(self, config):
        self.config = config

    def index(self):
        pass
    index.route = '/index/'

app = App({'config':1})
routeapp(app)

不要做中的bottle.route()部分App.__init__(),因为您将不能创建两个App类的实例。

如果您比装饰属性更喜欢装饰器的语法index.route=,可以编写一个简单的装饰器:

def methodroute(route):
    def decorator(f):
        f.route = route
        return f
    return decorator

class App(object):
    @methodroute('/index/')
    def index(self):
        pass


 类似资料:
  • 本文向大家介绍Kryo框架使用方法代码示例,包括了Kryo框架使用方法代码示例的使用技巧和注意事项,需要的朋友参考一下 Kryo框架的source已移至https://github.com/EsotericSoftware/kryo ,进入此页面,然后点击右边的Download Zip按钮,就能下载到最新版本的Kryo框架。      导入Eclipse时,记得JDK/JRE选用 JDK1.7版本

  • 问题内容: 我到处都看到应通过以下方式调用超类方法的示例: 这样做有什么不利之处吗? 问题答案: 请考虑以下情况: 因此,这些类形成了一个所谓的继承钻石: 运行代码会产生 不好,因为跳过了s 。其原因是因为的调用的直接。 的目的是解决继承钻石。如果您取消评论 和注释掉 该代码产生了更令人满意的结果: 现在,所有方法都被调用。请注意,在当时你定义你可能会 认为 这是与调用,但是你错了。在上述情况下,

  • 现在的问题是,我是否可以创建这些函数一次,并像助手方法一样重用它们。 一个威胁是线程安全。我用一个简单的测试来检查这个JUnit测试: 我用的是VMLENS。我可以通过更改变量来优化测试,这样可以检查随机性。目的是查看这些使用相同函数的多个线程是否因为并发访问而混淆了它们的输入。测试没有返回任何阴性结果。请对测试是否符合目标做出评论。 上面使用的结果是否也可以应用于和? 对函数和字节码的更多熟悉可

  • 问题内容: 我正在使用StAX创建一个很大的xml文档。到目前为止,我一直使用IndentingXMLStreamwriter类来获取格式正确的文档。几天前,我们使用旧的jdk版本(6.26)设置了一个jenkins服务器,在该版本上我遇到了构建错误。 我认为由于安装了jdk版本而找不到该软件包。由于不同的原因,这不能更改(顺便说一句,是否有人知道添加了此软件包(com.sun.xml.inter

  • 问题内容: 我有很大一部分不是循环的代码,只是发生一次但要花费一些时间的命令列表。我需要它根据更改的布尔值在任何时候暂停或终止此操作。我可以使用其他线程来挂起,恢复和停止此代码,但是不赞成使用这些方法,因此我想避免使用它们。我可以检查每行代码之间的布尔值,但我希望有一个更优雅的解决方案。有什么好方法吗? 问题答案: 自然,使用来处理中断线程的正确方法(在这种情况下,是暂停或停止线程)。它的设计目的

  • 本文向大家介绍Android Volley框架使用方法详解,包括了Android Volley框架使用方法详解的使用技巧和注意事项,需要的朋友参考一下 本文主要从两个方面对Android Volley框架的使用方法进行讲解,具体内容如下 一、网络请求 1.get方式请求数据    2.post方式请求数据    3.请求Json数据 二、图片加载 1.ImageRequest加载图片 2.Imag