我认为我对Python 3中的面向对象编程有些困惑。
我想弄清楚的是这里发生了什么:
class Library:
def __init__(self, some_list):
self.__articles_dict = {}
def create_article_objects(self, some_list):
for tuple in some_list:
for single_article in pair:
if single_article not in self.__articles_dict.keys():
article = Article(single_article)
self.__articles_dict[single_article] = article
some_list
是一个元组列表,其中包含两个彼此相关的文章名称(类似Google链接的东西)。在这里,我将根据我在另一个类(称为Article
)中创建的文章创建一个库。到目前为止一切都很好。
我的问题是关于这一部分:
def get_titles(self):
"""
returns a list of all the network's article's titles
:return: a list of strings representing the articles' titles
"""
titles_list = []
# run on the dict's keys (=article titles)
for article in self.__articles_dict.keys():
titles_list.append(article.get_title)
return titles_list
get_title
函数在Article
类中定义,这意味着它是一个文章对象方法。
据我所知,我的迭代是在字符串(for article in self.__articles_dict.values():
),所以Python如何让我在文章'上使用get_title()
。 ,这只是一个字符串?
感谢您的帮助,伙计们。
答案 0 :(得分:0)
您的迭代不一定是字符串。
字典键可以是任何类型。最有可能的是,Article
' __articles_dict
的密钥是Article
类的实例。
此外,你写道:
(...)为什么Python允许我在' article'上使用get_title(),这只是一个字符串?
如果Python允许get_title
article
上的所有人article
,则恰恰意味着article
不一个字符串。这恰好意味着get_title
有一个article
方法,这些方法没有。{/ p>
您可以通过调用type
轻松检查for article in self.__articles_dict.keys():
print(type(article))
titles_list.append(article.get_title)
的类型:
>>> class Foo:
... pass
...
>>> d = {Foo(): i for i in range(5)}
>>> for key in d.keys():
... print(type(keys))
...
<class '__main__.Foo'>
<class '__main__.Foo'>
<class '__main__.Foo'>
<class '__main__.Foo'>
<class '__main__.Foo'>
这是一个关于任何东西如何成为关键的例子。
import dask.multiprocessing
dask.set_options(get=dask.multiprocessing.get) # set processes as default
d = dd.read_csv("/Users/michaelshea/Documents/Data/tweet_text.csv",
parse_dates = ["created_at"], blocksize = 10000000)
len(d)