我试图将两个班级合并为一个班级。在代码块的末尾,您将看到一个名为starwarsbox的类。这包含了字符和框类。目的是打印出一个由星号和“星球大战”角色的信息制成的盒子(这是我的学习目的)。我尝试查找如何使用repr,但是没有运气实现它。我感谢您的帮助。

我得到<__main__.starwarsbox object at 0x000000000352A128>

class character:
    'common base class for all star wars characters'
    charCount = 0

    def __init__(self, name, occupation, affiliation, species):
        self.name = name
        self.occupation = occupation
        self.affiliation = affiliation
        self.species = species
        character.charCount +=1

    def displayCount(self):
        print ("Total characters: %d" % character.charCount)

    def displayCharacter(self):
        print ('Name :', self.name, ', Occupation:', self.occupation, ', Affiliation:', self.affiliation, ', Species:', self.species)


darth_vader = character('Darth Vader', 'Sith Lord', 'Sith', 'Human')
chewbacca = character('Chewbacca', 'Co-pilot and first mate on Millenium Falcon', 'Galactic Republic & Rebel Alliance', 'Wookiee')


class box:
    """let's print a box bro"""

    def __init__(self, x, y, title):
        self.x = x
        self.y = y
        self.title = title

    def createbox(self):
        for i in range(self.x):
            for j in range(self.y):
                 print('*' if i in [0, self.x-1] or j in [0, self.y-1] else ' ', end='')
            print()

vaderbox = box(10, 10, 'box')
vaderbox.createbox()


class starwarsbox(character, box):
    def __init__(self, name, occupation, affiliation, species, x, y, title):
        character.__init__(self, name, occupation, affiliation, species)
        box.__init__(self, x, y, title)

    def __str__(self):
        return box.__str__(self) + character.__str__(self)

newbox = starwarsbox('luke','jedi','republic','human',10,10,'box')

print(repr(newbox))

最佳答案

首先,如chepner所述,最后一行应为print(str(newbox))

starwarsbox已实现__str__,但box和character没有实现。

框应如下所示:

    def __str__(self):
        result = ""
        for i in range(self.x):
            for j in range(self.y):
                result += '*' if i in [0, self.x - 1] or j in [0, self.y - 1] else ' '
            result += '\n'
        return result


和字符应如下所示:

    def __str__(self):
        return 'Name :' + self.name + ', Occupation:' + self.occupation + ', Affiliation:' + self.affiliation + ', Species:' + self.species


将它们与您的代码进行比较,看看如何使用__str__的实现来实现displayCharacter和createBox。 :)

09-25 18:43