Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python获取对象属性_Python 3.x_Object - Fatal编程技术网

Python 3.x Python获取对象属性

Python 3.x Python获取对象属性,python-3.x,object,Python 3.x,Object,如果我键入print SongList[I],代码底部的循环似乎不会打印歌曲标题,它会打印给定对象的内存地址。我确信它返回的是歌曲列表,但是对象属性。我错过了一个方法吗?对不起,如果这已经在过去得到了回答,我找不到一个例子 class Song: def __init__(self, title, artist, duration = 0): self.title = title self.artist = artist self.dur

如果我键入print SongList[I],代码底部的循环似乎不会打印歌曲标题,它会打印给定对象的内存地址。我确信它返回的是歌曲列表,但是对象属性。我错过了一个方法吗?对不起,如果这已经在过去得到了回答,我找不到一个例子

class Song:

    def __init__(self, title, artist, duration = 0):
        self.title = title
        self.artist = artist
        self.duration = duration


class Album:

    def __init__(self, albumTitle, releaseYear, albumSize):
        self.albumTitle = albumTitle
        self.releaseYear = releaseYear
        self.trackList = []
        self.albumSize = albumSize

    def addSong(self, albumSong, position):
        self.trackList.append((position, albumSong))


class Artist:

    def __init__(self, name, year):
        self.name = name
        self.year = year
        self.members = []

    def addMembers(self, bandMember):
        self.members.append(bandMember)


class Person:

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender


BlinkAndSee = Album("Blink and See", 2018, 5)

Band = Artist("Dinkers", 2002)

AlexThomas = Person("Alex Thomas", 23, "Female")
SeanJohnson = Person("Sean Johnson", 25, "Male")
SineadMcAdams = Person("Sinead McAdams", 21, "Female")

Band.members.append(AlexThomas)
Band.members.append(SeanJohnson)
Band.members.append(SineadMcAdams)


Stoner = Song("Stoner", Band, 320)
Blink = Song("Blink and See", Band, 280)
See = Song("See", Band, 291)
DumbnessAndSand = Song("Dumbness and Sand", Band, 231)
OrangeYellow = Song("Orange Yellow", Band, 353)

BlinkAndSee.trackList.append(Stoner)
BlinkAndSee.trackList.append(BlinkAndSee)
BlinkAndSee.trackList.append(See)
BlinkAndSee.trackList.append(DumbnessAndSand)
BlinkAndSee.trackList.append(OrangeYellow)

SongList = BlinkAndSee.trackList

#Loop through the Song list from album tracklist
for i in range(SongList.__len__()):
    print(SongList[i].title)
这可能是由(可能)打字错误造成的: 请注意如何附加
BlinkAndSee.trackList.append(BlinkAndSee)

这实质上是将对象本身附加到轨迹列表中; 当然,这将导致一个错误,因为艺术家没有您在列表上迭代时访问的属性
title

在这种情况下,我建议您在
Album.addSong()
函数中添加一些行,以验证传递的参数; 差不多

def addSong(self, albumSong, position):
    if not isinstance(albumSong, Song):
       print("Passed wrong type to addSong")
    else:
       self.trackList.append((position, albumSong))

为什么在
相册
对象中有一个
addSong
方法,但随后手动使用
.tracklist.append(…)
将歌曲添加到曲目列表?我无法重现您的问题。它为我打印
Stoner
,然后崩溃,因为你将专辑本身添加到了它的列表中。如果我将
BlinkAndSee.trackList.append(BlinkAndSee)
更改为
BlinkAndSee.trackList.append(Blink)
它会打印歌曲标题,正如你所描述的那样。总是一个打字错误!谢谢你的帮助谢谢你的帮助,这很有效,我明白你为什么还要检查类型了!