如何从另一个方法调用一个方法?
How do I call a method from another method?
我正在 python 编写程序。我引入一个整数,程序返回给我这个数字的质因数分解。
例如 6 ---> 3, 2。另一个例子 16 --> 2, 2, 2, 2.
我正在用 OOP 来做。我用 2 种方法(is_prime
和 prime_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.number
或 n
.
如果您需要 is_prime
来处理任意数字,而不仅仅是 class 初始化的任何数字,您应该添加一个额外的参数。
我正在 python 编写程序。我引入一个整数,程序返回给我这个数字的质因数分解。 例如 6 ---> 3, 2。另一个例子 16 --> 2, 2, 2, 2.
我正在用 OOP 来做。我用 2 种方法(is_prime
和 prime_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.number
或 n
.
如果您需要 is_prime
来处理任意数字,而不仅仅是 class 初始化的任何数字,您应该添加一个额外的参数。