首页 > 其他 > 详细

类的运算符重载

时间:2020-05-10 18:25:21      阅读:46      评论:0      收藏:0      [点我收藏+]

今天下午复习了一下这学期学的python中的类的内容,其实也就是做了几个实训。
发现有些题目看似简单,也有我自作聪明的因素,掉了挺多小坑的,记录一下。
题目为:
class Vector3d:
def init(self, x, y, z):
self.__x = x
self.__y = y
self.__z = z
def length(self):
return (self.__x2 + self.__y2 + self.__z**2) ** 0.5
# 请在这里增加3个特殊方法,分别用来支持加法运算符、减法运算符以实现两个三维向量间的加法和减法运算,以及打印函数print()
#********** Begin #
def str(self):
def add(self, v):
def sub(self, v):
#
* End *********#
测试代码:
x1, y1, z1 = map(int, input().split(‘,‘))
x2, y2, z2 = map(int, input().split(‘,‘))
v1 = Vector3d(x1, y1, z1)
v2 = Vector3d(x2, y2, z2)
print(v1+v2)
print(v1-v2)
1.我的第一版答案是这样的。
def add(self, v):
self.__x += v.__x
self.__y += v.__y
self.__z += v.__z
def sub(self, v):
self.__x -= v.__x
self.__y -= v.__y
self.__z -= v.__z
def str(self):
return self.__x,self.__y,self.__z
因为输出是print(v1+v2);print(v1-v2),我输出的是两个None,我怀疑是因为不是返回值字符串引起的,然后我直接在__str__的函数里return 3,4,5,结果果然是None,初步证明了我的猜想。
2.第二版答案
既然只是变量的类型错了,那好办鸭,直接 return str((self.__x,self.__y,self.__z))不就行了嘛。结果我傻了,输出还是俩None,啥情况???
3.第三版答案
我又仔细地看了看题目,print(v1+v2);print(v1-v2),我的代码v1+v2啥也不是嘛,怪不得输出是个None.我应该在那个add和sub里加上return,return什么呢,我一开始竟然直接return了三个向量的x,y,z分量....我傻了,原谅我最近躁动的大脑,这个答案就不单分成一版了,我还要点面子..
4.第四版答案
因为str是vector这个类的函数,因此,其他print里面放的对象应该是vector这个类.于是
def add(self, v):
self.__x += v.__x
self.__y += v.__y
self.__z += v.__z
return Vector(self.__x,self.__y,self.___z)
def sub(self, v):
self.__x -= v.__x
self.__y -= v.__y
self.__z -= v.__z
return Vector(self.__x,self.__y,self.___z)
我心想这回总行了吧,结果终于不是None了,但是还是不对,哪里不对呢?因为测试代码的测试案例是3,4,5和4,5,6.按理说输出来的应该7,9,11和 -1,-1,-1,结果我的7,9,11是对的,后面的那个变回去了3,4,5.相信大家看见这个答案之后就知道我错到哪里了吧.类的属性在方法之间是可以继承的,我这里第一次运行v1+v2的时候已经把v1这个实例的属性给更改了.第二次又减掉自然变回去喽.因为是v2加到v1上,v1减去v2嘛.
5.终极版(哎,好乐色的终极版,我最近需要补补脑子)
def add(self, v):
x = self.__x + v.__x
y = self.__y + v.__y
z = self.__z + v.__z
return Vector3d(x,y,z)
def sub(self, v):
x = self.__x - v.__x
y = self.__y - v.__y
z = self.__z - v.__z
return Vector3d(x,y,z)
def str(self):
return str((self.__x, self.__y, self.__z))
以上的实训来自https://www.educoder.net/tasks/f76i8vzohesc,我做出来真不容易。。。

类的运算符重载

原文:https://www.cnblogs.com/softword/p/12864189.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!