我是 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
Run Code Online (Sandbox Code Playgroud)
现在这很好用,但是当我从底部取消注释该行时,当我在 str 类型对象上调用 tostring() 方法时,会出现一些运行时错误。这是问题。如何防止将此类与 Movie 类型不同的对象插入到集合中?我的 Java 人会像这样制作列表:
List<Movie>
Run Code Online (Sandbox Code Playgroud)
我也可以在那里为 add_movie 函数添加一个条件,如下所示:
if isinstance(movie, Movie):
Run Code Online (Sandbox Code Playgroud)
但没有其他办法吗?
在 Python 中 - 你应该表现得恰当,不要做没有意义的事情。这是一种专为教学和科学家设计的语言的灵活性的一部分,并没有过分强调类型或“对象契约”和其他类似的东西。
通过去掉所有“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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2131 次 |
| 最近记录: |