Python 2.7面向对象的__init__方法

时间:2012-11-02 02:14:23

标签: windows class python-2.7 spyder

我刚刚阅读了 Think Python 中有关类的__init__方法的解释。但是,我试图启动我为Project Euler.net制作的Prime Generator功能,我继续得到错误:

Traceback (most recent call last):
  File "C:\Users\-------\Desktop\Primes.py", line 54, in <module>
    Primes.__main__()
TypeError: unbound method __main__() must be called with Primes instance as first argument (got nothing instead)

我把它拉到了一个控制台中,我终于通过调用它来实现它:

primes = Primes()
primes.primegenerator(some number)

然后运行正常。如何在__init__方法中使用此行为?

以下是完整代码:

class Primes():
    def __init__(self, primes = []):
        self.primes = primes
    def primegenerator(self,limit):
        'Generates primes to a given limit'
        primes = [3]
        i = 3 # i is the counter
        while len(primes) < limit - 1:
            for prime in primes:
                if i % prime == 0:
                    i += 2
                    break
                elif prime != primes[-1]:
                    continue
                else:
                    primes.append(i)
                    i += 2
                    break
        primes.insert(0,2)
        return primes
def main(self):
    limit = input('Enter a limit please: ')
    primes = Primes.primegenerator(limit)
    print '-------------------------' * 2
    print The answer is: %d' %primes[-1]
    print 'The sum of the primes is: %d' %sum(primes)
    print print '-------------------------' * 2   

这是否是一个很好的程序,可以添加 init 方法?

1 个答案:

答案 0 :(得分:1)

错误在Primes.__main__()中 - 您需要传递一个类似的实例 Primes.__main__(self)Primes.__main__(primes)

但要获得完整的答案,您必须显示完整的代码。

并不是一个好主意

Primes = Primes()

在该语句之前,Primes是一个类(或者可能是一个函数),之后它就是一个实例。 更好的说法

primes = Primes()