运行Udacity Python入门课程代码时遇'Class method XXX无xxx属性'错误求助
解决"Class method 'XXX' object has no attribute 'xxx'"错误(Udacity Python入门第6课)
嘿,我当初学Udacity这门课的时候也踩过一模一样的坑!咱们慢慢来拆解这个问题~
首先,这个错误的核心意思是:你创建的Movie实例对象,没有你试图访问的那个属性。结合你贴的代码,大概率是下面几个原因:
可能的问题根源
- media模块里的Movie类定义不完整:比如你在后续代码里想访问
toy_story.storyline或者其他属性,但Movie类的__init__方法里根本没给这个属性赋值;或者类的初始化参数和你传的不匹配。 - 你贴的代码有截断:Avatar的海报链接是
https://upload.wikimedia.org/wikipedia/en/thumb/b...,虽然这不一定是直接触发错误的原因,但后续用这个不完整的链接肯定会出问题,先补全它。
一步步解决
1. 检查你的media.py里的Movie类
Udacity这节课要求Movie类必须包含几个核心属性,并且在__init__方法里正确初始化。确保你的Movie类是类似这样的:
class Movie(): # 初始化方法要和你传的参数对应上 def __init__(self, title, storyline, poster_image_url, trailer_youtube_url, rating): self.title = title self.storyline = storyline self.poster_image_url = poster_image_url self.trailer_youtube_url = trailer_youtube_url self.rating = rating
划重点:你后续要访问的任何属性,都必须在__init__里用self.属性名 = 值的方式定义,不然就会触发"no attribute"错误。
2. 核对实例化代码的参数
你创建toy_story的时候传了5个参数:标题、剧情、海报链接、预告片链接、评分。要确保Movie类的__init__方法正好接收这5个参数,顺序也完全对应。比如如果你的Movie类没写rating参数,那你传了"4 Stars"就会出错;反过来如果少传了参数也会有问题。
3. 补全截断的代码
把Avatar的海报链接补全成完整的URL,比如正确的Avatar海报链接是https://upload.wikimedia.org/wikipedia/en/thumb/b/b0/Avatar-Teaser-Poster.jpg/220px-Avatar-Teaser-Poster.jpg,预告片链接也可以补成https://youtu.be/5PSNL1qE6VY,这样你的代码就完整了:
import media toy_story = media.Movie( "Toy Story", "A story of a boy and his toys that come back to life", "https://upload.wikimedia.org/wikipedia/en/thumb/1/13/Toy_Story.jpg/220px-Toy_Story.jpg", "https://youtu.be/KYz2wyBy3kc", "4 Stars" ) avatar = media.Movie( "Avatar", "A Marine on an Alien Planet", "https://upload.wikimedia.org/wikipedia/en/thumb/b/b0/Avatar-Teaser-Poster.jpg/220px-Avatar-Teaser-Poster.jpg", "https://youtu.be/5PSNL1qE6VY", "4.5 Stars" ) # 测试一下,比如打印Toy Story的标题 print(toy_story.title)
如果做完这些还是报错,把你的media.py里的Movie类代码也贴出来,我再帮你精准排查~
内容的提问来源于stack exchange,提问作者Alejandro Vidaurre
相关产品推荐
相关产品推荐

