python - 一个方法如何调用它在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
解决方案
我的意思是解释器甚至还没有完全读完 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
推荐阅读
- python - 对类似的错误消息进行分组 - NLP/机器学习 python
- python - 如何同时使用camelCase和snake_case
- character-encoding - cypress runner 忽略 charset="windows-1252" html 标记
- php - 如何在 jquery 中传递 form_dropdown 的 set_value?
- apache - Apache ModRewrite 语言 .htaccess
- .net - 无法设置 DataGridViewComboBoxColumn 的值而不先显示它
- swift - iPad 上的 Playgrounds 使用此代码崩溃
- c# - C++/CLI 获取“包装器”类对象以显示在 C# 中
- javascript - 您可以使用 WhatsApp API For Business 来验证用户吗?
- javascript - 用鼠标滚轮切换元素