2017-01-15 6 views
1

Я думаю, что я немного путают с объектно-ориентированного программирования в Python 3.объекты в классах Python

То, что я пытаюсь выяснить, это то, что происходит здесь:

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

Код для get_titles не соответствует вашему запросу (он использует '.keys()') и действительно не работает; вы должны использовать '.values ​​()', как вы заявляете, что будет экземпляром статьи, созданной в 'create_article_objects'. –

ответ

0

Ваша итерация не обязательно на строках.

Словарь ключей может быть любого типа. Скорее всего, ключи Article's __articles_dict являются экземплярами класса Article.

Кроме того, Вы писали:

(...) как же Python позволяет мне использовать get_title() на 'статьи', которая является только строка?

Если Python позволяет вам все get_title на article, это точно означает, что article является не строка. Это точно означает, что article имеет метод get_title, которого нет в строках.

Вы можете легко проверить тип article с заходом 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'> 
+0

Спасибо, ребята, помогли мне много, это действительно не работает! ха-ха. Я должен был повторять ценности, как вы сказали. Благодарю. –

+0

@OfirZ Вы можете найти логику своей программы, но с чисто программной точки зрения вы можете перебирать ключи от dict, а ключи от dict не обязательно являются строками. Вот почему вопрос, который поднял ваш пост и который я ответил, интересен ИМО: люди привыкли устанавливать строки как ключи, в то время как все может быть ключом. –

Смежные вопросы