首页 > 解决方案 > 看似相似的代码行的不同输出。为什么?

问题描述

在这个程序中,我注意到当我使用 print 显示两组的交集时,输出存在差异,一种格式根据__str__()另一种格式打印出列表。为什么会这样?所有其他 python 魔术函数都是真的吗?对不起这么长的代码。

    class intSet(object):
            """An intSet is a set of integers
            The value is represented by a list of ints, self.vals.
            Each int in the set occurs in self.vals exactly once."""

            def __init__(self):
                """Create an empty set of integers"""
                self.vals = []

            def insert(self, e):
                """Assumes e is an integer and inserts e into self""" 
                if not e in self.vals:
                    self.vals.append(e)

            def member(self, e):
                """Assumes e is an integer
                   Returns True if e is in self, and False otherwise"""
                return e in self.vals

            def remove(self, e):
                """Assumes e is an integer and removes e from self
                   Raises ValueError if e is not in self"""
                try:
                    self.vals.remove(e)
                except:
                    raise ValueError(str(e) + ' not found')

            def intersect(self, other):
                """Input: two set of integers - sel and other
                   Returns intersection of the two sets.
                """
                temp = self.vals[:]
                for e in temp:
                    if e not in other.vals:
                        self.vals.remove(e)   
                return self.vals

           def __str__(self):
                """Returns a string representation of self"""
                self.vals.sort()
                return '{' + ','.join([str(e) for e in self.vals]) + '}'


    setA = intSet()
    setA.insert(3)
    setA.insert(4)
    setA.insert(5)

    setB = intSet()
    setB.insert(6)
    setB.insert(4)
    setB.insert(8)

    print("setA: ", setA)
    print("setB: ", setB)

    setA.intersect(setB)
    print(setA)             #output: {4}

    print("setA.intersect(setB): ", setA.intersect(setB))   #output: [4]    

标签: pythonoop

解决方案


这是因为print(setA)打印了 intSet 对象实例,并且print("setA.intersect(setB): ", setA.intersect(setB))打印了 intersect 方法的返回值,它是一个列表。


推荐阅读