方法,作用类似于静态方法和常规方法



我想知道是否有一种方法可以让类定义一个行为像静态方法(可以不使用实例变量调用)和常规方法(可以使用实例变量调用)的方法。

我正在做一个RSA模块,它可以帮助我解决RSA问题,初始化是这样的:

class RSA:
def __init__(self, n: int, e: int, c: int, p=None, q=None, phi=None):
self.n = n
self.e = e
self.c = c
self.p = p
self.q = q
assert p == None or gmpy2.is_prime(p), 'p must be prime'
assert q == None or gmpy2.is_prime(q), 'q must be prime'
self.phi = phi

在那门课上,有一种方法可以把n分解成p和q,它是这样的(使用的算法是无关的,所以我懒得解释)

def fermat_factorization(self, n=None):
if n == None:
n = self.n
t_ = gmpy2.isqrt(n)+1 
counter = 0 
t = t_ + counter
temp = gmpy2.isqrt((t * t) - n)

while((temp * temp) != ((t * t) - n)):
counter += 1 
t = t_ + counter
temp = gmpy2.isqrt((t * t) - n)

s = temp
p = t + s
q = t - s
return p, q

这个实现不起作用。我想做的是让这个方法是动态的,也就是说,可以通过

从外部调用
p, q = RSA.fermat_factorization(n) # n is some large number

yet也可以在实例中调用,如:

s1 = RSA(n, 65537, c) # c and n is some large number
p, q = s1.fermat_factorization() # without specifying n because it is already an instance attribute

在python中,您使用模块来处理这类内容,而不是类:

inrsa.py

def fermat_factorization(n):
"""Ordinary function"""
class RSA:
def fermat_factorization(self):
"""Method"""
return fermat_factorization(self.n)

其他地方:

import rsa
x = rsa.fermat_factorization(100)
obj = rsa.RSA(...)
y = obj.fermat_factorization()

一个函数的行为取决于它的调用方式,这是一个灾难的配方。别那样做。

相关内容

最新更新