嵌套的Python类和对父方法的访问

时间:2014-05-15 17:46:58

标签: python python-2.7

我在Python中有以下课程:

class SDK(object):
    URL = 'http://example.com'

    def checkUrl(self, url):
        #some code

    class api:
        def innerMethod(self, url):
            data = self.checkUrl(url)
            #rest of code

但是当我尝试从api访问checkUrl时,我收到错误。我尝试通过以下方式调用嵌套方法:

sdk = SDK()
sdk.api.innerMethod('http://stackoverflow.com')

有没有简单的方法来调用内部类方法,或者(如果没有)将方法结构化为内部对象?任何建议将不胜感激。

编辑: 班级代码:

class SDK(object):
    def run(self, method, *param):
        pass

    class api:
        def checkDomain(self, domain):
            json = self.run('check', domain)
            return json

运行代码:

sdk = SDK()
result = sdk.api().checkDomain('stackoverflow.com')

2 个答案:

答案 0 :(得分:2)

SDK类不是示例中api类的父级,即api不从SDK继承,它们仅仅是嵌套的。

因此,self方法中的api.innerMethod对象只是api类的一个实例,并且不提供对SDK类方法的访问权限。

我强烈建议您更多地了解面向对象的编程概念,并掌握这里的问题。它会对你有很大的帮助。

至于使用模块来实现这些方面的内容,例如,您可以将SDK类中的所有内容提取到sdk.py文件,这将是sdk模块。

sdk.py:

URL = 'http://example.com'

def checkUrl(url):
    #some code

class api:
    def innerMethod(self, url):
        data = checkUrl(url)
        #rest of code

main.py:

import sdk

api = sdk.api()
api.innerMethod('http://stackoverflow.com')

或者您可以更进一步,将sdk转换为包含api作为其中模块的包。

有关如何使用模块和软件包的详细信息,请参阅https://docs.python.org/2/tutorial/modules.html

答案 1 :(得分:0)

如果你想让一个方法充当类方法,你必须告诉python:

class SDK:
    class api:
         @classmethod
         def foo(cls):
                 return 1

然后您可以访问

SDK.api.foo()

根据你想要做的事情,这会闻起来有点像pythonic。如果它只是您关心的命名空间,那么通常使用模块。