嵌套Python类和对父级的访问';s法

嵌套Python类和对父级的访问';s法,python,python-2.7,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时,

我有以下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')

在您的示例中,
SDK
类不是
api
类的父类,也就是说,
api
不是从
SDK
继承的,它们只是嵌套的

因此,
api.innerMethod
方法中的
self
对象只是
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
是一个模块


有关如何使用模块和包的详细信息,请参阅。

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

class SDK:
    class api:
         @classmethod
         def foo(cls):
                 return 1
然后你就可以访问

SDK.api.foo()

取决于你想做什么,这闻起来有点不像蟒蛇。如果只是您关心的名称空间,您通常会使用一个模块。

显示
代码的其余部分
内部类的用途是什么?@Daniel我正在尝试对代码进行结构化,这就是我希望使用内部类的原因。你有什么更好的主意吗?
api
类似乎没有比简单地定义方法
SDK.checkDomain
更大的好处。我建议你使用模块,而不是内部类。