我不明白__add__函数是如何在这里工作的



如果条件为"add_length",则在帧形成时,isistance有第二个参数"length",但在"add_inches"的情况下,第二个值为int(整数(。我不能理解这部分。为什么它们不能都是int(integer(呢。感谢您的帮助!


class Length:
def __init__(self, feet, inches):
self.feet = feet
self.inches = inches

def __str__(self):
return f'{self.feet} {self.inches}'
def __add__(self, other):
if isinstance(other, Length):
return self.add_length(other)
if isinstance(other, int):
return self.add_inches(other)
else:
return NotImplemented

def __radd__(self, other):
return self.__add__(other)


def add_length(self, L):
f = self.feet + L.feet
i = self.inches + L.inches
if i >= 12:
i = i - 12
f += 1
return Length(f, i)

def add_inches(self, inches):
f = self.feet + inches // 12
i = self.inches + inches % 12
if i >= 12:
i = i - 12
f += 1
return Length(f, i)


length1 = Length(2, 10)
length2 = Length(3, 5)

print(length1 + length2)
print(length1 + 2`
print(length1 + 20)
print(20 + length1)

当两个长度对象添加在一起时,第一个条件是检查场景:

length1 = Length(2, 10)
length2 = Length(3, 5)

print(length1 + length2)

第二个条件是当一个整数被加到一个长度上时,检查场景。

print(length1 + 2)
print(length1 + 20)

由于需要如何访问数据,条件调用两个不同的方法add_lengthadd_inches。也就是说,对于add_length,它通过对象(L(的属性进行访问。对于add_inches,它是从整数(英寸(访问的。

根据我的理解,这只是这个类的设计方式。

您可以将长度类中的两个对象添加在一起(这是第一个isinstance(,也可以将一个以英寸为单位的整数添加到长度中(这是第二个isinstance(。

最新更新