为了账号安全,请及时绑定邮箱和手机立即绑定

为什么求取最大公约数的函数不能写在类中呢?

class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q

    def __add__(self, r):
        return Rational(self.p * r.q + self.q * r.p, self.q * r.q)

    def __sub__(self, r):
        return Rational(self.p*r.q-self.q*r.p,self.q*r.q)

    def __mul__(self, r):
        return Rational(self.p*r.p,self.q*r.q)

    def __div__(self, r):
        return Rational(self.p*r.q,self.q*r.p)
    
    def gcd(p,q):
        a = p
        b = q
        if a < b:
            t = a
            a = b
            b = t
        t = a%b
        while t!=0:
            a = b
            b = t
            t = a%b
        return b
    g = gcd(self.p,self.q)
    def __str__(self):
        return '%s/%s'%(self.p/g,self.q/g)

    __repr__ = __str__

r1 = Rational(1, 2)
r2 = Rational(1, 4)
print r1 + r2
print r1 - r2

显示一直是'self' is not defined

正在回答

3 回答

类当中的都叫方法,不是函数。

而方法的话,括号里第一个参数必须是self。

2 回复 有任何疑惑可以回复我~

把下面这段代码放到  def__str__里面就OK了

https://img1.sycdn.imooc.com//5af95a7f0001c75c02150287.jpg

可能是类只能定义一些实例的方法,不能出现像这种直接“g = gcd(self.p,self.q)"语句,这句中的 self没有从上文中承接下来,所以报错。(PS:这只是个人理解。我也是新手,也赖得去到处找资料答案。)

0 回复 有任何疑惑可以回复我~

太复杂

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

为什么求取最大公约数的函数不能写在类中呢?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号