gpt4 book ai didi

python - 属性错误 : Movie instance has no attribute 'number_of_seasons'

转载 作者:行者123 更新时间:2023-11-28 03:28:54 25 4
gpt4 key购买 nike

我正在学习使用 python 编写代码,但我遇到了一个错误:

AttributeError: Movie instance has no attribute 'number_of_seasons'

所以问题很清楚,但我不确定如何解决。基本上我创建了一些类,我想显示一些具有不同属性的电影和系列。

这是我创建类和属性的 media.py 文件:

class Video():
"""This class created for both common info movies and series"""
def __init__(self, movie_title, story_line, url_poster, url_trailer, badge):
self.title = movie_title
self.storyline = story_line
self.poster = url_poster
self.trailer = url_trailer
self.badge = badge

def show_trailer(self):
webbrowser.open(self.trailer)

# here i define the class called Film for all movies
class Movie(Video):
"""This class is used to create all movies"""
def __init__(self, movie_title, story_line, url_poster, url_trailer, badge, movie_duration, movie_actors):
Video.__init__(self, movie_title, story_line, url_poster, url_trailer, badge)
self.duration = movie_duration
self.actors = movie_actors

# here i define the class called Series for all series with episodes and seasons
class Series(Video):
def __init__(self, movie_title, story_line, url_poster, url_trailer, badge, number_of_seasons, number_of_episodes):
Video.__init__(self, movie_title, story_line, url_poster, url_trailer, badge)
self.number_of_seasons = number_of_seasons
self.number_of_episodes = number_of_episodes

然后我有 enterteinment_center.py 文件,其中我只添加了 1 部电影和 1 系列:

import media
import fresh_tomatoes


ironman = media.Movie("Ironman",
"Genius, billionaire, and playboy Tony Stark, who has inherited the defense contractor Stark Industries from his father",
"http://cdn.collider.com/wp-content/uploads/2015/04/iron-man-1-poster.jpg",
"https://www.youtube.com/watch?v=8hYlB38asDY",
"http://i.imgur.com/45WNQmL.png",
"126 minutes",
"English")

games_of_thrones = media.Series("Games Of Thrones",
"The series is generally praised for what is perceived as a sort of medieval realism.",
"https://vignette3.wikia.nocookie.net/gameofthrones/images/2/2c/Season_1_Poster.jpg/revision/latest?cb=20110406150536",
"https://www.youtube.com/watch?v=iGp_N3Ir7Do&t",
"http://i.imgur.com/45WNQmL.png",
"7 Seasons",
"12 episodes")

movies = [ironman, games_of_thrones, ironman, games_of_thrones, ironman, games_of_thrones]
fresh_tomatoes.open_movies_page(movies)

创建 html 的最后一个文件是 fresh_tomatoes.py 但我将只在此处粘贴我认为对修复有用的代码片段:

    def create_movie_tiles_content(movies):
# The HTML content for this section of the page
content = ''
for movie in movies:
if isinstance(movie, Movie):
# Extract the youtube ID from the url
youtube_id_match = re.search(r'(?<=v=)[^&#]+', movie.trailer)
youtube_id_match = youtube_id_match or re.search(r'(?<=be/)[^&#]+', movie.trailer)
trailer_youtube_id = youtube_id_match.group(0) if youtube_id_match else None

# Append the tile for the movie with its content filled in
content += movie_tile_content.format(
movie_title=movie.title,
poster_image_url=movie.poster,
trailer_youtube_id=trailer_youtube_id,
film_badge=movie.badge,
film_description=movie.storyline
)
elif isinstance(movie, Series):
# Extract the youtube ID from the url
youtube_id_match = re.search(r'(?<=v=)[^&#]+', movie.trailer)
youtube_id_match = youtube_id_match or re.search(r'(?<=be/)[^&#]+', movie.trailer)
trailer_youtube_id = youtube_id_match.group(0) if youtube_id_match else None

# Append the tile for the movie with its content filled in
content += movie_tile_content.format(
movie_title=movie.title,
poster_image_url=movie.poster,
trailer_youtube_id=trailer_youtube_id,
film_badge=movie.badge,
film_description=movie.storyline,
serie_season=movie.number_of_seasons
)

return content

def open_movies_page(movies):
# Create or overwrite the output file
output_file = open('fresh_tomatoes.html', 'w')

# Replace the placeholder for the movie tiles with the actual dynamically generated content
rendered_content = main_page_content.format(movie_tiles=create_movie_tiles_content(movies))

# Output the file
output_file.write(main_page_head + rendered_content)
output_file.close()

# open the output file in the browser
url = os.path.abspath(output_file.name)
webbrowser.open('file://' + url, new=2) # open in a new tab, if possible

所以基本上电影和连续剧有一些不同的属性,所以如果我想显示例如《权力的游戏》的季数,我会收到一条错误消息,告诉我电影《钢铁侠》没有任何称为季数的属性。

希望有人能帮上忙!非常感谢!

最佳答案

您不能使用相同的函数来提取具有不同属性的类的值。

您需要为每个类中的每个属性分配一个默认值,或者更改函数以在循环中检查电影 的类型。

例如:

for movie in movies:
if isinstance(movie, Movie):
# add movie attributes to the content
content += movie_tile_content.format(
movie_title=movie.title,
poster_image_url=movie.poster,
trailer_youtube_id=trailer_youtube_id,
film_badge=movie.badge,
film_description=movie.storyline,
serie_seasons='no season'
)

elif isinstance(movie, Series):
# add series attributes to the content
content += movie_tile_content.format(
movie_title=movie.title,
poster_image_url=movie.poster,
trailer_youtube_id=trailer_youtube_id,
film_badge=movie.badge,
film_description=movie.storyline,
serie_seasons=movie.number_of_seasons
)

此模式允许您根据媒体/视频的类型更改内容。

您可能需要在第二个文件中导入类型:

from media import Movie, Series

关于python - 属性错误 : Movie instance has no attribute 'number_of_seasons' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44844553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com