我在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')
答案 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。如果它只是您关心的命名空间,那么通常使用模块。