2016-04-20 3 views
0

Я изучаю C++ сейчас, поэтому я обычно сравниваю C++ с Python. Я нашел, что список на C++ настолько отличается от Python. Например, когда я определяю «»-структуру, а затем создать список из них, я хотел бы использовать этот код:Как создать список классов в Python

struct foo exm[3] 

Это будет создать список, который содержит 3 элементов обув, и я могу инициализировать элемент если я хочу. Я могу использовать exm [i] для индексации списка, и это единственный способ, которым я могу использовать элемент, эти элементы анонимны, я думаю.

Как я могу добиться такого же прогресса в Python? Я думаю, что я должен создать новый «класс», чтобы определить ту же «структуру» на C++. Но как насчет списка? Проблема в том, что я должен создать явный элемент и добавить его в список позже. Как быстро создать этот список? С другой стороны, как я могу создать список, содержащий новый анонимный объект класса?

Возможно, это глупый вопрос и без какой-либо практики, мне просто интересно. Большое спасибо.

+2

В Python список представляет собой контейнер, который не заботится о его содержании. Вы можете «инициализировать» свой список со списком: [exm() for _ in xrange (3)] – Schore

+0

Вы не объявляете списки с ожидаемыми значениями типа так же, как на языках C/C++/Java/других языках. Таким образом, Python не заботится о типах. На самом деле списки Python являются гетерогенными и могут содержать много типов. '[1, 'apple', {'pear': True}, False]' является допустимым списком в Python. –

+0

Я также буду рекомендовать против того, что @Schore сказал (извините), потому что предварительная инициализация списка на Python - это ИМО, очень плохая практика. Вы должны создать список, а затем вызвать 'append' или' extend' по мере необходимости. –

ответ

0

Вы можете создать список и дать элементы в конструкторе, например:

In [4]: l = [1, 2, 3] 
In [5]: l, type(l) 
Out[5]: ([1, 2, 3], list) 
In [6]: class A: pass 
In [7]: foo = A 
In [8]: l = [A(), foo()] 
In [9]: l 
Out[9]: [<__main__.A instance at 0x7fe56ebb1cf8>, <__main__.A instance at 0x7fe56ebb1ef0>] 
+0

Почему вы ввели переменную 'foo'? – user2357112

+0

В этом нет необходимости, но это показывает, что любой класс может быть назначен в переменной и использовать как этот класс. – Petr