Python与方法中的给定参数不匹配

2024-04-19 21:54:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一名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()

Tags: theselfjsonformatreturnresponsesessiondef
1条回答
网友
1楼 · 发布于 2024-04-19 21:54:29

self隐式地传递给构造函数

所以呢

return SakaiSite.SakaiSite(self, self.requester, siteid)

是真的吗

return SakaiSite.SakaiSite(self,self, self.requester, siteid)

相反,您应该将自变量命名为ommit,因为它将被隐式传递

return SakaiSite.SakaiSite( self.requester, siteid)

相关问题 更多 >