提问在注释里
import math
class Point:
def __init__(self, x=0.0, y=0.0):
self.__x = x
self.__y = y
def getx(self):
return self.__x
def gety(self):
return self.__y
def distance_from_xy(self, x, y):
return math.hypot(abs(self.__x - x), abs(self.__y - y))
#一般括号里的 x,y不是都要先定义例如self.__x和self.__y?为什么 这里的self.__x沿用__init__里的
def distance_from_point(self, point):
return self.distance_from_xy(point.getx(), point.gety())
"""
这里有点搞不明白,要不要先写一个表达式self.__point=point 在return之前 ? 还有一点,可不可以用self.getx()和self.gety() 代替point.getx()和point.gety()?
"""
point1 = Point(0, 0)
point2 = Point(1, 1)
print(point1.distance_from_point(point2))
print(point2.distance_from_xy(2, 0))
最后所有带双下划线的变量__,我知道是private的意思,如果都不用可以哇
**1、要不要先写一个表达式self.__point=point 在return之前 ? **
看具体业务,一般用不到_point属性,就没必要给Point类去新增属性了。
2、可不可以用self.getx()和self.gety() 代替point.getx()和point.gety()?
不一样的,self代表当前类的意思,即类实例本身。
point是作为参数名,外界传递的参数,不同的对象,只不过和self都属于Point类的实例对象而已,所携带的信息不一样。
对self的理解:
当然不行了啊,要计算的是类封装的x和y与传入的point的距离
如果用point.getx和point.gety替换,不就是算自己和自己的距离了么
这个函数是算当前Point点与传入的Point点的距离,所以你说的两个都是不需要的
另外关于你下面的问题,假设目前为A=Point(a,b),point=B=Point(x,y)
1.这里有点搞不明白,要不要先写一个表达式self.__point=point 在return之前 ? :这里不需要,应为你算得是B点,如果self.point=point,会变成A.point=B(x,y),你觉得这个类有需要用到这个赋值功能吗?
2.还有一点,可不可以用self.getx()和self.gety() 代替point.getx()和point.gety()?:这里不可以,self和cpp里面的this指针一个意思,表示当前类的成员,当前类为A,则self.point等效于A.point。
self.getx变成了A.a,而point.getx()是B.x,这样才是计算A到B的距离。如果换成self.getx,那变成了计算A和A点之间的距离了。