You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用含Tweepy的类时出现Unbound Method错误求助

解决Python类方法调用的"unbound method"错误及类初始化问题

嘿,我来帮你搞定这个问题!你遇到的这个错误其实是Python类使用中很常见的新手坑,咱们一步步来解决:

错误原因分析

你看到的 unbound method searchForKeyword() must be called with myfuncs instance as first argument 错误,本质是你直接用类本身调用了实例方法,而没有先创建类的实例对象。Python里的普通方法(没有@classmethod或@staticmethod装饰的)默认第一个参数是self,它指向当前类的实例,所以必须通过实例来调用这类方法,不能直接用类名。

看你的调用代码:

m.searchForKeyword('capitals', 50)

这里的m是你导入的myfuncs类本身,不是类的实例,所以Python找不到self参数,就报错了。

另外,你的myfuncs类的__init__方法也有几个小问题:

  1. 把consumer_key、auth、api等作为参数传入,但又直接在方法里硬编码了密钥值,这完全没必要;
  2. 参数里的access_toekn_secret是拼写错误(应该是access_token_secret);
  3. auth和api应该在类内部初始化,而不是从外部传入。

修正后的完整代码

首先是myfuncs类的修正版本

import tweepy
from textblob import TextBlob

class myfuncs:
    def __init__(self):
        # 初始化Twitter API认证信息
        self.consumer_key = 'ur7LPai7hD8nYw9CMlQ8exgEO'
        self.consumer_secret = 'mak7uBwYNucDIhF4lPIfy4JMIEIaVM9Dx0zgEo2LYwru7UDHPi'
        self.access_token = '816453418235600896-jvDVIfnewq6oJzYIbDFh7vvI9vfMd2I'
        self.access_token_secret = 'kqJFFHCJMA1mWQmg2XFPvFSnRGasxx4CgxhNVY3vZIweh'
        
        # 在类内部完成认证和API实例化
        self.auth = tweepy.OAuthHandler(self.consumer_key, self.consumer_secret)
        self.auth.set_access_token(self.access_token, self.access_token_secret)
        self.api = tweepy.API(self.auth)

    def searchForKeyword(self, x, z):
        sentiment_results = []
        public_tweets = self.api.search(x, count=z)  # 必须用self.api访问实例属性
        for tweet in public_tweets:
            analysis = TextBlob(tweet.text)
            sentiment_results.append(analysis.sentiment)
            print(analysis.sentiment)
        print("successful")  # 修正了拼写错误succesful
        return sentiment_results  # 返回结果列表,方便后续处理

然后是修正后的调用代码

import tweepy
from textblob import TextBlob
from myfuncs import myfuncs as m

# 第一步:先创建类的实例
my_tweet_analyzer = m()
# 第二步:通过实例调用方法
my_tweet_analyzer.searchForKeyword('capitals', 50)

关键改动说明

  1. 实例化类:先创建my_tweet_analyzer = m(),这样才能通过实例调用方法,Python会自动把实例作为self参数传入;
  2. 访问实例属性:把api.search()改成self.api.search(),因为api是myfuncs实例的属性,必须通过self来访问;
  3. 优化列表逻辑:原来的a.append(s)再赋值的写法完全多余,直接把情感分析结果append到列表里就行;
  4. 修正拼写错误:把succesful改成了正确的successful;
  5. 返回结果:让方法返回情感分析结果列表,方便你后续使用这些数据。

额外小建议

  • 不要把API密钥硬编码在代码里,最好用环境变量或者配置文件来管理,避免不小心泄露;
  • 可以遵循PEP8命名规范,把方法名改成search_for_keyword,变量名也用小写加下划线的形式,代码可读性会更好。

内容的提问来源于stack exchange,提问作者Season5Ryze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:11:20