我正在尝试按标签过滤推文并输出推文的文字。
类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)
答案 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.