python类和对象的引用问题

提问在注释里


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点的距离,所以你说的两个都是不需要的

img


你不要搞混了这的的x和y跟上面init里面的x和y,这两个是不同的概念。init中的x和y就是你下面这里的self.__x和self.__y,属于Point类的点坐标(比如说A=Point),
那么后面的distance_from_xy这个函数这里的xy是指B(x,y),这个函数计算的A与B之间的距离。

另外关于你下面的问题,假设目前为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点之间的距离了。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632