2015-09-14 4 views
0

Я разработчик Java, который в настоящее время пытается написать мою собственную библиотеку Python. У меня большая часть функциональности (я хочу), у меня просто возникают проблемы с некоторыми сложностями синтаксиса 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, в том, как они работают конструкторы/методы/импорта.

Это мой код для объекта SakaiPy:

#!/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() 

И для объекта SakaiSite:

#!/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() 

ответ

1

само передается неявно конструкторам

так

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

действительно

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

вместо этого вы должны ommit самозапуска аргумент, как он будет передан неявно

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

кто это сделал. Благодаря! – Zeratas

Смежные вопросы