首页 > 解决方案 > 一个方法如何调用它在python中所属的类?

问题描述

我正在学习 python,我遇到了下面分数的代码。Fraction 类有一个__add__方法,其返回调用 Fraction 类。( return Fraction(new_num // common, new_den // common))。

我真的不明白一个方法如何调用它所属的类。我的意思是当方法调用 Fraction 类时,解释器甚至还没有完全读完 Fraction 类(__eq__方法后面还有__add__方法) 。__add__如果方法在方法下面时__add__要使用类__eq__方法__eq__怎么办?

class Fraction:
    def __init__(self, top, bottom):
        self.num = top
        self.den = bottom
    def __str__(self):
        return str(self.num) + "/" + str(self.den)
    def show(self):
        print(self.num, "/", self.den)
    def __add__(self, other_fraction):
        new_num = self.num * other_fraction.den + \
            self.den * other_fraction.num
        new_den = self.den * other_fraction.den
        common = gcd(new_num, new_den)
        return Fraction(new_num // common, new_den // common)
    def __eq__(self, other):
        first_num = self.num * other.den
        second_num = other.num * self.den
        return first_num == second_num

标签: pythonclassparsinginterpreter

解决方案


我的意思是解释器甚至还没有完全读完 Fraction 类

__add__当你第一次执行时,它已经被解析并执行了。函数和方法体不会在导入时执行,但类体(甚至是嵌套的类体)会。

演示脚本:

class Upper:
    print('Upper')
    class Mid:
        print('Mid')
    def method(self):
        class Low:
            print('Low')
        print('method')

输出:

$ python3
>>> import demo
Upper
Mid

因此,在该方法中引用该方法的类并不是错误(因为在类构造期间没有调用该方法)。

另一方面,当类仍在导入时执行的部分中构建时,您无法访问该类的名称。

>>> class A:
...     print(A)
...
[...]
NameError: name 'A' is not defined

推荐阅读