我正在编写一个Fraction
类,并试图在初始化Fraction
对象时使用gcd(a,b)
。然而,当我尝试这样做时,如果没有Fraction.gcd(a,b)
的Fraction
部分,它将无法工作。我在这里使用了@staticmethod
,但是它什么也不做,也就是说,没有它,我的代码也能工作。
我是否可以不把Fraction.
放在前面就调用gcd
?在Java中,我通常会创建一个静态方法,然后调用它。我可以很容易地把GCD代码放在init中,但是我正在尝试在这里学习!
我在这里错过了很多。有人能解释一下:静态方法,类中的助手方法,以及如何在类中使用各种方法吗?
class Fraction(object):
def __init__(self, a, b):
if Fraction.gcd(a, b) > 1:
d = Fraction.gcd(a, b)
self.num = a/d
self.denom = b/d
else:
self.num = a
self.denom = b
@staticmethod
def gcd(a,b):
if a > b: a,b = b,a
while True:
if b % a == 0: return a
a, b = b%a, a
def __repr__(self):
return str(self.num) + "/" + str(self.denom)
别忘了,在Python中,并不是所有的东西都需要放在一个类中。关于
gcd
没有什么比独立函数更适合作为类方法:所以把它从类中去掉。现在您只需调用gcd(a, b)
。如果类中有一个大方法需要多次调用静态方法,则可以定义一个本地函数对象并将该方法分配给它,以便可以改为调用此函数。
对于静态方法gdc:
例如方法gdc:
所以
以及
将允许您调用(根据您的请求,开头不带分数:)
另外,如果您想要一些python类和实例/静态方法的基本示例 看看我的一些博客文章,特别是“Jython中的Factorial和Fibonacci”:
http://carlosqt.blogspot.com/search/label/Jython
像任何其他类属性一样考虑类中的方法——在
self
上引用它们:不管它是实例方法、类方法还是静态方法。
如果您想保留与类关联的代码,当然可以使用staticmethod,但在Python中通常使用模块级函数,在这种情况下,您可以将其称为
gcd
:相关问题 更多 >
编程相关推荐