python - 类型错误:必须使用 'method name' 实例作为第一个参数调用未绑定(bind)方法 'class name'(改为使用 str 实例)

标签 python api python-2.7 typeerror

您好,我正在尝试使用 simpletmdb python 包装器来实现“电影数据库”API,但我无法解决这个问题。

当我尝试创建对象并调用获取电影信息的方法时,我不断收到此错误。

in info 
response = TMDB._request('GET', path, params)
TypeError: unbound method _request() must be called with TMDB instance as first argument        (got str instance instead)

我调用它的代码是:

from tmdbsimple import TMDB

tmdb = TMDB('API_KEY')
movie = tmdb.Movies(603)
response = movie.info()
print movie.title

simpletmdb 包装器的必要部分是,Movies 类是 TMDB 的子类:

class TMDB:
   def __init__(self, api_key, version=3):
        TMDB.api_key = str(api_key)
        TMDB.url = 'https://api.themoviedb.org' + '/' + str(version)

    def _request(method, path, params={}, json_body={}):
        url = TMDB.url + '/' + path + '?api_key=' + TMDB.api_key
        if method == 'GET':
            headers = {'Accept': 'application/json'}
            content = requests.get(url, params=params, headers=headers).content
        elif method == 'POST':
            for key in params.keys():
                url += '&' + key + '=' + params[key]
            headers = {'Content-Type': 'application/json', \
                       'Accept': 'application/json'}
            content = requests.post(url, data=json.dumps(json_body), \
                                    headers=headers).content
        elif method == 'DELETE':
            for key in params.keys():
                url += '&' + key + '=' + params[key]
            headers = {'Content-Type': 'application/json', \
                       'Accept': 'application/json'}
            content = requests.delete(url, data=json.dumps(json_body), \
                                    headers=headers).content
        else:
            raise Exception('method: ' + method + ' not supported.')
        response = json.loads(content.decode('utf-8'))
        return response

    #
    # Set attributes to dictionary values.
    # - e.g.
    # >>> tmdb = TMDB()
    # >>> movie = tmdb.Movie(103332)
    # >>> response = movie.info()
    # >>> movie.title  # instead of response['title']

    class Movies:
        """ """
        def __init__(self, id=0):
            self.id = id

        # optional parameters: language
        def info(self, params={}):
            path = 'movie' + '/' + str(self.id)
            response = TMDB._request('GET', path, params)
            TMDB._set_attrs_to_values(self, response)
            return response

可以在此处找到包装器 https://github.com/celiao/tmdbsimple 我只是想遵循那里找到的示例。

任何帮助都会很棒!

最佳答案

根据 Github 上的 @qazwsxpawel 的建议,@staticmethod 装饰器已添加到 TMDB 类方法 _request 和 _set_attrs_to_values 中。如果您升级 tmdbsimple 版本,这些示例现在应该可以在 Python 2.7 中运行。 https://pypi.python.org/pypi/tmdbsimple

关于python - 类型错误:必须使用 'method name' 实例作为第一个参数调用未绑定(bind)方法 'class name'(改为使用 str 实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550738/

相关文章:

python - 在 python 中初始化变量,一些变量来自构造函数,一些变量来自用户

python - 截距 scipy.stats.linregress 的标准误差

Javascript Canvas 和内部功能的优化?

python - 将空白分隔数字列表转换为 float 列表

python-2.7 - 尝试在python中播放AudioSegment时权限被拒绝

python - python中与cx_Oracle绑定(bind)变量的异常

python - 是否可以从另一个静态方法中调用静态方法

api - LARAVEL 8 - 没有数据库的 Eloquent 模型从 API 导入数据

javascript - google地点详情API结果中返回了price_level

python-2.7 - 如何使带有连字符 (-) 的命令行参数在 python v2.7 中显示为非可选参数?