如何从其他方法调用方法?

时间:2015-04-10 13:23:32

标签: python oop python-3.x methods

我在python中编写程序。我介绍了一个完整的数字,程序回复给我这个数字的素数因子的分解。 例如6 ---> 3,2。另一个例子16 - > 2,2,2,2。

我是用OOP做的。我创建了一个包含2种方法(PrimeFactorsis_prime)的类(prime_factor_decomposition)。第一种方法是说数字是素数,第二种方法是分解。

这是代码:

class PrimeFactors(object):
    def __init__(self, number):
        self.number = number

    def is_prime(self):
        n = self.number - 1
        a = 0
        loop = True

        if self.number == 1 or self.number == 2:
            loop = False

        while n >= 2 and loop:
            if self.number % n != 0:
                n -= 1
            else:
                a += 1
                loop = False
        return a == 0

    def prime_factor_decomposition(self): 
        factors = [] 
        n = self.number - 1
        loop = True

        if PrimeFactors.is_prime(self.number):
            factors.append(self.number)
            loop = False

        while n >= 2 and loop:
            if self.number % n == 0 and PrimeFactors.is_prime(n):
                factors.append(n)
                self.number = self.number / n
                if self.number % n == 0:
                    n += 1
            n -= 1
        return factors

s = PrimeFactors(37)
print(s.is_prime())

我犯了一个错误。我认为它与方法调用有关。 我的问题是,如果两个方法来自同一个类,我如何从另一个方法调用方法?

3 个答案:

答案 0 :(得分:3)

您需要使用self.来调用同一类的另一个方法:

class Foo:
    def __init__(self):
        pass

    def method1(self):
        print('Method 1')

    def method2(self):
        print('Method 2')
        self.method1()

答案 1 :(得分:0)

只是一般建议:有好的(和FAST!)算法来检查数字是否为素数。你的循环以n-1开头,这非常低效。我们可以说数字是 1000000,所以你的算法从999999开始,但第一个偶数可能的数字是n的一半!所以我会从2上升到n / 2:

for i in range(n/2):
    if self.number%i==0:
        return true
return false

我认为更好的目的是返回不是布尔值,而是返回数字,它被认为是除数:

for i in range(n/2):
    if self.number%i==0:
        return i
return 0

然后您可以重复调用该方法,并且只能获得素数。

答案 2 :(得分:0)

Jkdc的回答绝对正确。我还想注意你的方法调用会有问题。您定义了is_primeself作为唯一参数,但是当您调用它时,您已经传入self.numbern

如果你需要is_prime使用任意数字,而不仅仅是初始化类,你应该添加一个额外的参数。