【发布时间】:2020-02-29 12:08:49
【问题描述】:
我在这个类中有一个简单的类和一个类变量:
class QuotesToScrape:
authors_list = []
def __init__:
这个类里面的一个方法里面有一行代码(方法是从init调用的):
def gather_authors_list(self):
self.authors_list = some_value
此行不起作用,变量 authors_list 仍为空。但是,如果我将“self”更改为类名,它就可以正常工作:
def gather_authors_list(self):
QuotesToScrape.authors_list = some_value
没有使用装饰器。我觉得这是我需要了解的一些重要技巧,以防止我将来出现严重问题。
稍后添加。重要部分:我有另一个类变量“quotes”,它工作得很好。这是我的代码的几乎完整片段。类变量“quotes”可以,类变量“authors_list”不行。
class QuotesToScrape:
quotes = []
authors_list = []
def __init__(self):
for page_number in range(1, 501):
page_url = self.make_page_url(page_number)
soup = self.get_soup(page_url)
if self.out_of_quotes(soup):
break
quote_blocks = self.parse_quotes(soup)
for quote_block in quote_blocks:self.quotes
quote = self.extract_quote(quote_block)
self.quotes.append(quote)
self.gather_authors_list()
...
def gather_authors_list(self):
authors = list(set([quote.get('Author') for quote in self.quotes]))
if 'Alexandre Dumas fils' in authors:
duma_index = authors.index('Alexandre Dumas fils')
authors[duma_index] = 'Alexandre (fils) Dumas'
self.authors_list = sorted(authors, key = lambda x: x.split(" ")[-1])
稍后添加。问题解决了。更改了最后一行以匹配来自 cmets 的方向。这解决了我的问题,now 方法不会创建新变量,而是使用现有的空类变量:
self.authors_list.extend(sorted(authors, key = lambda x: x.split(" ")[-1]))
【问题讨论】:
标签: python-3.x class class-variables