【问题标题】:How to create an instance of a class inside a method within the class, python如何在类中的方法内创建类的实例,python
【发布时间】:2016-10-15 08:38:57
【问题描述】:

我的课程处理整数列表并计算它们,因此它们没有重复出现的值。我已经实现了一个新方法“intersect”,它接受两个 intSet 对象并创建一个新对象,其值出现在两个对象列表 (vals) 中。

最初我在方法中创建一个新列表(而不是一个对象)以添加在两个列表中找到的整数,但是我认为创建一个新对象并将值添加到新对象中的 val 是合适的。但是我收到错误NameError: global name 'inSet' is not defined

这是我的代码:

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 __str__(self):
        """Returns a string representation of self"""
        self.vals.sort()
        return '{' + ','.join([str(e) for e in self.vals]) + '}'

    def intersect(self, other):
        #intersected = []
        intersected = inSet()
        for x in self.vals:
            if x in other.vals:
                #intersected.append(x)
                intersected.insert(x)
        return intersected


a= {-15,-14,-5,-2,-1,1,3,4,11,18}
b= {-12,-3,3,8,12,16,18,20}
set1 = intSet()
set2 = intSet()
[set1.insert(x) for x in a]
[set2.insert(x) for x in a]

print set1.intersect(set2)

额外问题,大部分代码是由管理员为 MOOC 6.00.1x 编写的。我只需要实现“相交”方法。为什么在 list [] 大括号上使用用于字典目的的大括号?

【问题讨论】:

  • 你忘记了 t 的名字 inSet
  • 奖励答案:在 Python 中创建 set 您可以使用 set(){} 即。 {1,2,3,2,5}
  • 天啊,Python 中的 Scala 练习?!
  • 以您的方式使用列表理解肯定是一种不好的做法。作为副作用,您创建了 None 的寄生列表,这不是您的意图。简单的循环在这里更干净。

标签: python class oop methods


【解决方案1】:

它是 intSet,而不是 inSet,你在 intersect 方法中拼错了。作为一种习惯,最好以大写开始你的课程(虽然没有固定的规则,但这是一种被广泛遵守的习惯)。

关于花括号,它们不仅适用于字典,也适用于 Python 集合。因此,通过在 __str__ 方法中使用它们,输出表明您的类的实例确实是一种集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2012-10-26
    • 2011-08-24
    • 2018-11-23
    相关资源
    最近更新 更多