Я новичок в python, но у меня есть некоторые знания Java. Здесь у меня есть свой первый код Python:Ограничить тип элементов списка
class Movie(object):
def __init__(self, name, year):
self.name = name
self.year = year
def tostring(self):
return "%s (%s)" % (self.name,self.year)
def __str__(self):
return self.tostring()
class MoviesCollection(object):
def __init__(self):
self.colection = []
def add_movie(self, movie):
self.colection.append(movie)
def __iter__(self):
return iter(self.colection)
def __str__(self):
return '\n'.join(map(str, self.colection))
filmy = MoviesCollection()
a = Movie('A', 256)
b = Movie('B', 512)
c = Movie('C', 1024)
filmy.add_movie(a)
filmy.add_movie(b)
filmy.add_movie(c)
filmy.add_movie(c)
filmy.add_movie(c)
filmy.add_movie(c)
#filmy.add_movie('Aloha')
for m in filmy:
print m.tostring()
print filmy
Теперь это работает хорошо, но, как я uncoment линии снизу у меня будет несколько ошибок во время выполнения, как я вызываю метод ToString() для объекта типа ул. И вот вопрос. Как я могу предотвратить вставку такого объекта разного типа, кроме Movie, в colection? Парень Java у меня бы этот список выдержанные так:
List<Movie>
Кроме того, я мог бы поставить условие там add_movie функции, как это:
if isinstance(movie, Movie):
но не есть ли другой способ?
Вот совет: не пишите Java в Python. –
Нет, другого пути нет. Python относится к разработчикам как к соглашающимся взрослым, если кто-то хочет быть настолько глупым, чтобы вставить строковый объект и сломать все, тогда от них не следует этого мешать. –
Вам не нужен конкретный класс коллекции фильмов, потому что список является общим, и вы можете сбрасывать что-либо в нем. –