这可以在python中创建子方法吗?

这可以在python中创建子方法吗?,python,class,methods,python-requests,Python,Class,Methods,Python Requests,我想写一个方法来解析一个带有请求库的站点,该方法应该包含一部分包含base_url的url,并在此基础上执行get请求,主要问题是我不知道如何使其更好 我现在想的是: import requests class Response: # ... def site_parser(self, atom): base_url="https://example.com/" def category1(self): return requests.get(base_

我想写一个方法来解析一个带有请求库的站点,该方法应该包含一部分包含base_url的url,并在此基础上执行get请求,主要问题是我不知道如何使其更好

我现在想的是:

import requests

class Response:

# ...

def site_parser(self, atom):

    base_url="https://example.com/"

    def category1(self):
        return requests.get(base_url + category1/ + atom).text

    def category2(self):
        return requests.get(base_url + category2/ + atom).text

if __name == "__main__":

def main():

    result = Response()
    result.site_parser.category1("atom")
    result.site_parser.category2("atom")

因此,所需的数据具有相同的基本url,但要进入的目录不同,如果之后只调用了该方法,我需要生成每个目录。有没有办法做到这一点?我不想让基url成为全局变量,在我看来,您需要的是另一个类

class Response:

    # ... Some dark magic here ...

    def site_parser(self, atom):
        return ResponseParser(self, atom)

class ResponseParser:

    def __init__(self, res, atom):
        self.atom = atom
        self.res = res
        self.base_url = "https://example.com/"

    def category1(self):
        # ... Do stuff ...

    def category2(self):
        # ... Do stuff ...
那你就把它叫做

result = Response()
result.site_parser("atom").category1()
如果您真的坚持要去掉site_解析器调用中的括号,那么可以将atom位移动到categoryN方法,并将site_解析器变成一个新的解析器,但在我看来,这可能更让人困惑


作为一名函数式程序员,我和其他人一样喜欢嵌套函数和闭包,但在我看来,基于您给出的有限示例,在这种情况下,使用第二个helper类可能是更具可读性的方法。

您可以这样定义嵌套函数,但是你不能这样称呼它们。可以将category1定义为site_parser.category1在site_parser下,但我不认为这样做有什么好处。在这种情况下,site_解析器真的应该是一个类,不是吗?@tobias_k,但如果它们是以我写的方式声明的,那么这是否可能调用它们呢?