2016-02-11 56 views
2

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

我得到<__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)) 
+1

'repr'调用'__repr__',而不是'__str__'。 – chepner

+0

那会是什么?我尝试了'print(str(newbox))',它仍然显示'__ main __。starwarsbox object 0x000000000350A128' – stuffatwork190

+0

在'box'和'Character'类中实现'__str__'函数,然后使用print(newbox)。 – Zety

回答

1

首先,chepner提到,最后一行应该是print(str(newbox))

starwarsbox已执行__str__,但框和字符不。

框应类似于:

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。 :)

+0

非常感谢你!这工作! :-)。我很感激。我一直试图在我的头上绕了两天......大声笑。 – stuffatwork190

+0

'print(str(newbox))'和'print(newbox)'有什么区别? – Zety

+1

我只是试着做'print(newbox)',它和print(str(newbox))一样。我猜测,因为其他更改确保它是一个正在打印的字符串。 – stuffatwork190