Python:调用类来打印Tweet内容

时间:2018-04-10 05:47:28

标签: python api class twitter

我正在尝试按标签过滤推文并输出推文的文字。

类Tweet包含总体推文信息,我只需要“文本”。我知道str方法需要用来调用类的每个实例,但是当我“打印”时,下面的类是不可访问的。请帮忙:D

编辑:在课程推文中用__str__替换__repr__的含义是什么?谢谢!

class Tweet():

    tweet = Tweet()
    def __init__(self, tweet_dict = {}):        
        if "statuses" in tweet_dict:
            self.status = tweet_dict["statuses"]
        else:
            self.status = ""

        if "text" in self.status:
            self.text = item["text"]
        else:
            self.text = ""

    def __str__(self):
        tweet_info = self.text
        return tweet_info

#-------------------------------------------------------------------

tweet_inst = []
for dic in statuses:
    item_instances = Tweet(dic)
    tweet_inst.append(item_instances)
print(tweet_inst)

2 个答案:

答案 0 :(得分:0)

__str__需要return对象的字符串表示。

__str__目标是可读的,__repr__目标是明确的。

当您打印列表(是tweet_inst )时,它会遍历列表中包含的对象( of Tweet )并调用它们的__repr__

你想添加def __repr__(self): return str(self)所以他们做同样的事情,然后它将返回self.text而不是对象默认表示(它在内存中的位置)< / p>

class Tweet(object):

    def __init__(self, x):
        self.x = x

    def __str__(self):
        return self.x

    def __repr__(self):
        return '__repr__' + str(self.x)

>>> t1 = Tweet('t1')
>>> t2 = Tweet('t2')
>>> list_ = [t1, t2]
>>> print(list_)
[__repr__t1, __repr__t2]

Rather than the default
[<__main__.Tweet object at 0x02AFA810>, <__main__.Tweet object at 0x029E2BF0>]

Here is a great answer by moshez关于两者之间的区别。

答案 1 :(得分:0)

首先,类定义中的第二行tweet = Tweet()是错误的。您无法创建包含所述类实例的类变量。

其次,您在第11行分配self.text = item["text"]。什么是item?那应该是tweet_dict吗?

第三,您可以直接在self.text中返回__str__,无需先将其分配给varibale tweet_info。

最后但并非最不重要的是,您不应该使用可变数据类型作为默认参数,就像您在第4行中所做的那样。Here's why.