三行代码  ›  专栏  ›  技术社区  ›  shahmir782

如何打印对象本身而不是对象的位置?

  •  0
  • shahmir782  · 技术社区  · 2 月前

    我正在制作一个程序,从文本文件中读取包含问题、答案和分数的行,这些行分别位于第I行、第I+1行和第I+2行。这些行将被读取,然后保存在一个数组中。但当我得到打印时,我得到了输出:

    
    [<__main__.TreasureChest object at 0x7f89197c5470>, <__main__.TreasureChest object at 0x7f89197c54a8>, <__main__.TreasureChest object at 0x7f89197c5400>, <__main__.TreasureChest object at 0x7f89197c5438>, <__main__.TreasureChest object at 0x7f89197c57b8>, <__main__.TreasureChest object at 0x7f89197c5828>, <__main__.TreasureChest object at 0x7f89197c5860>, <__main__.TreasureChest object at 0x7f89197c5898>, <__main__.TreasureChest object at 0x7f89197c58d0>, <__main__.TreasureChest object at 0x7f89197c5908>, <__main__.TreasureChest object at 0x7f89197c5940>, <__main__.TreasureChest object at 0x7f89197c5978>, <__main__.TreasureChest object at 0x7f89197c59b0>, <__main__.TreasureChest object at 0x7f89197c59e8>, <__main__.TreasureChest object at 0x7f89197c5a20>]
    
    
    
    

    我知道这是一个关于打印字符串而不是对象位置的常见问题,但在我的例子中,这里没有一个答案有效或有用。

    以下是代码:

    
    
    
    import linecache
    
    
    searchfile = open("TreasureChestData.txt", 'r')
    
    class TreasureChest:
    
        def __init__(self, question, answer, points):
    
            self.question = question 
            self.answer = answer 
            self.points = points 
    
    
    
        
    
    def read_data():
    
        searchfile = open("TreasureChestData.txt", 'r')
        arrayTreasure = []
        
    
        for i in range (1, 16):
    
    
            question = linecache.getline('TreasureChestData.txt', i)
            answer = linecache.getline('TreasureChestData.txt', (i+1))
            pointer = linecache.getline('TreasureChestData.txt', (i+2))
    
            arrayTreasure.append(TreasureChest(question, answer, pointer))
    
            i = i + 3
    
        print (len(arrayTreasure))
    
        return arrayTreasure
    
        searchfile.close()
        
    data = read_data()
    print (data)
    
    
    2 回复  |  直到 2 月前
        1
  •  1
  •   kindall    2 月前

    定义类的 __repr__ (控制它在容器中以及其他地方的显示方式)及其 __str__ (控制打印时的显示方式)。它们可以是相同的,如图所示。

    class TreasureChest:
    
        def __init__(self, question, answer, points):
            self.question = question 
            self.answer = answer 
            self.points = points 
    
        def __repr__(self):
            return f'{type(self).__name__}("{self.question}")'
    
        __str__ = __repr__
    
    t = TreasureChest("What is the airspeed veloicity of an unladen swallow?", 42, 100)
    print(t)
    
        2
  •  -1
  •   Tim Roberts    2 月前

    您所看到的只是特殊功能的默认实现 __str__ 方法你要做的就是 def __str__(self): ,并让它返回您希望使用的任何字符串。

    推荐文章