嵌套Python类和对父级的访问';s法
我有以下Python类:嵌套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时,
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
更大的好处。我建议你使用模块,而不是内部类。