Python类中的对象

时间:2017-01-15 16:05:02

标签: python object

我认为我对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()。 ,这只是一个字符串?

感谢您的帮助,伙计们。

1 个答案:

答案 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)