Python类中的对象

2024-04-20 12:01:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我对python3中的面向对象编程有点困惑。你知道吗

我想弄清楚的是这里发生了什么:

 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类中定义的,这意味着它是一个article对象方法。你知道吗

据我所知,我的迭代是在stringsfor article in self.__articles_dict.values():)上进行的,那么Python为什么允许我在“article”上使用get_title(),而“article”只是一个字符串呢?你知道吗

谢谢你们的帮助,伙计们。你知道吗


Tags: theinselfforgetdefarticlesome
1条回答
网友
1楼 · 发布于 2024-04-20 12:01:21

您的迭代不一定在字符串上。你知道吗

字典键可以是任何类型。很可能,Article__articles_dict的键是Article类的实例。你知道吗

此外,你还写道:

(...) how come Python lets me use get_title() on 'article', which is only a string?

如果Python允许所有的get_title都在article上,那么确切地说article不是一个字符串。这正好意味着article有一个get_title方法,而字符串没有。你知道吗

您可以通过调用type轻松检查article的类型:

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'>

相关问题 更多 >