我是 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
现在效果很好,但是当我取消注释底部的行时,我会遇到一些运行时错误,因为我在 str 类型对象上调用 tostring() 方法。这是问题。如何防止将与 Movie 不同类型的对象插入集合中?我中的 Java 人会像这样制作列表集合:
List<Movie>
我也可以像这样在 add_movie 函数中添加一个条件:
if isinstance(movie, Movie):
但是没有别的办法吗?
最佳答案
在 Python 中——你应该举止得体,不要做没有意义的事情。这是为教学和科学家设计的语言的灵 active 的一部分,并且不会过分强调类型或“对象契约”和其他类似的内容。
通过去除所有“Java”来编写代码的方式是:
class Movie(object):
""" A movie, thing to spend a few hours
watching, then a few hours hating yourself
over watching it. """
def __init__(self, name, year):
self.name = name
self.year = year
def __str__(self):
return '{} ({})'.format(self.name, self.year)
movie_collection = [Movie('Titanic', 1997), Movie('Showgirls', 1995)]
for movie in movie_collection:
print(movie)
关于python - 限制列表元素的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27620231/