如何从另一个方法调用一个方法?

How do I call a method from another method?

我正在 python 编写程序。我引入一个整数,程序返回给我这个数字的质因数分解。 例如 6 ---> 3, 2。另一个例子 16 --> 2, 2, 2, 2.

我正在用 OOP 来做。我用 2 种方法(is_primeprime_factor_decomposition)创建了一个 class (PrimeFactors)。第一种方法判断数字是否为素数,第二种方法返回分解结果。

这是代码:

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())

我弄错了。我认为这与方法调用有关。 我的问题是,如果它们都来自同一个 class?

,我如何从另一个方法调用一个方法

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

class Foo:
    def __init__(self):
        pass

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

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

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

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

我认为更适合你的目的是 return 不是布尔值,而是数字,它被发现是除数:

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

然后你可以重复调用该方法,只会得到素数。

Jkdc 的回答完全正确。我还想指出,您的方法调用会出现问题。您定义 is_prime 以将 self 作为其唯一参数,但是当您调用它时,您传入的是 self.numbern.

如果您需要 is_prime 来处理任意数字,而不仅仅是 class 初始化的任何数字,您应该添加一个额外的参数。