我是一名Java开发人员,目前正在尝试编写自己的Python库。我有大部分的功能(我想要的),我只是有一些Python语法复杂的麻烦。我以为我有工作代码,但当我尝试一个例子,我得到了这个错误:
/usr/local/Cellar/python3/3.4.3/Frameworks/Python.framework/Versions/3.4/bin/python3.4 /Users/willkara/Development/GitHub/SakaiPy/Examples/Example.py
Traceback (most recent call last):
File "/Users/willkara/Development/GitHub/SakaiPy/Examples/Example.py", line 14, in <module>
site = Sak.getSakaiSite('1e420647-1dce-4dbb-a789-9dfae3ccc8d8')
File "/Users/willkara/Development/GitHub/SakaiPy/SakaiPy/SakaiPy.py", line 28, in getSakaiSite
return SakaiSite.SakaiSite(self, self.requester, siteid)
TypeError: __init__() takes 3 positional arguments but 4 were given
我的目标是拥有这个基本对象SakaiPy
,它是处理大多数高级逻辑的库的主类。你知道吗
我希望用户能够做到这一点,在最后用户导入项目。你知道吗
SakaiPyObject = SakaiPy(connectioninfo)
site = SakaiPyObject.getSakaiSite('site id goes here')
announcements = site.getAnnouncements()
我已经设置了大多数类和函数,我只是对Python和Java在如何处理构造函数/方法/导入方面的一些差异感到困惑。你知道吗
这是我的Sakayy对象代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
from SakaiPy import RequestHandler
from SakaiPy.SakaiTools import SakaiSite
loginURL = "/direct/session?_username={0}&_password={1}"
session = requests.Session()
class SakaiPy(object):
def __init__(self, connectioninfo):
"""Generate the session cookie"""
self.baseURL = connectioninfo['baseURL']
# Generate a session cookie & store it in the requesting session
session.post(self.baseURL + loginURL.format(
connectioninfo['username'],
connectioninfo['password']
))
self.requester = RequestHandler.RequestHandler(session, self.baseURL)
def getSakaiSite(self, siteid):
return SakaiSite.SakaiSite(self, self.requester, siteid)
对于RequestHandler对象:
#!/usr/bin/python
# -*- coding: utf-8 -*-
class RequestHandler(object):
def __init__(self, session, url):
self.baseUrl = url
self.session = session
"""This class handles the login/cookie mechanisms and request generation."""
def executeRequest(self, url):
"""Returns the JSON response from the specified URL."""
response = self.session.get(self.baseURL + url)
"""If it is a good response, then return the content in json form for the Sakai Object.
If it is a bad response, raise an exception.
"""
if response.status_code == 200:
return response.json()
else:
response.raise_for_status()
对于萨凯斯的物体:
#!/usr/bin/python
# -*- coding: utf-8 -*-
class SakaiSite(object):
def __init__(self, rq, siteid):
self.requester = rq
self.siteid = siteid
def getMemership(self):
return self.requester.executeRequest('/direct/membership/site/{0}.json'.format(self.siteid))
def getRoster(self):
return self.requester.executeRequest('/direct/roster/site/{0}.json'.format(self.siteid))
def getGradebook(self):
return self.requester.executeRequest('/direct/gradebook/site/{0}.json'.format(self.siteid))
def getNews(self):
return self.requester.executeRequest('/direct/news/site/{0}.json'.format(self.siteid))
def getCalendar(self):
return self.requester.executeRequest('/direct/calendar/site/{0}.json'.format(self.siteid))
def getAnnouncements(self):
return self.requester.executeRequest('/direct/announcement/site/{0}.json'.format(self.siteid))
def getForums(self):
return self.requester.executeRequest('/direct/forums/site/{0}.json'.format(self.siteid))
def getContents(self):
return self.requester.executeRequest('/direct/content/site/{0}.json'.format(self.siteid))
最后,这里是我的演示代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from SakaiPy import SakaiPy
"""Say I want to get a list of all of the Calendars I have for a specific site. I'll write all the code first then explain each part."""
authInfo = {}
authInfo['baseURL'] = "https://sakai.rutgers.edu"
authInfo['username'] = "username"
authInfo['password'] = "password"
Sak = SakaiPy.SakaiPy(authInfo)
site = Sak.getSakaiSite('siteid')
site.getAnnouncements()
self隐式地传递给构造函数
所以呢
是真的吗
相反,您应该将自变量命名为ommit,因为它将被隐式传递
相关问题 更多 >
编程相关推荐