类方法'XXX'对象没有属性'xxx'错误

时间:2018-04-09 23:43:14

标签: python class methods

我到处都搜索过,找不到原因?我正在尝试运行此代码(它来自Python第6课的Udacity Initiate Programming):

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",
                     "5 Stars")

# print(toy_story.storyline)
avatar.show_trailer()

使用以下代码在同一文件夹上的media.py文件上成功使用了Class Movie,它正好创建了Movie对象:

import webbrowser

class Movie():
    def __init__(self, movie_title, movie_storyline, movie_poster, movie_trailer, movie_rating):
        self.title = movie_title
        self.storyline = movie_storyline
        self.poster = movie_poster
        self.trailer = movie_trailer
        self.rating = movie_rating

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

但是,每当我尝试运行第一个代码时,我都会收到错误消息:

--------------------------------------------------------------------------- AttributeError                            Traceback (most recent call last) <ipython-input-44-50b40b5dbf08> in <module>()
     14 
     15 # print(toy_story.storyline)
---> 16 avatar.show_trailer()

AttributeError: 'Movie' object has no attribute 'show_trailer'

我已经尝试了很多东西,已经阅读了关于缩进但是没关系,甚至从头开始写下来完美地缩进代码,在方法@classmethod上添加了show_trailer()它作为一个带有return语句的函数,甚至通过python -tt media.py运行它也无效。

我知道这门课程是为Python 2设计的,但是认为理解它会是一个额外的挑战,然后去弄清楚如何在Python 3上做到这一点,直到现在我已成功=(。

帮助!

1 个答案:

答案 0 :(得分:0)

从一开始我就使用Atom和Hydrogen Plugin运行.py这就是问题所在,代码在Python的IDLE上完美运行。

我会研究为什么,但我的猜测是Atom + Hydrogen可能不是代码的最佳组合。

问题解决了,Code确实有效。