鱼C论坛

 找回密码
 立即注册
查看: 2164|回复: 1

38讲课后题问题:python类的属性是不是不能为列表

[复制链接]
发表于 2017-5-8 22:48:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


  1. import math as m

  2. class Point:
  3.     position=[0,0]
  4.     def __init__(self, x, y):
  5.         self.position[0] = x
  6.         self.position[1] = y

  7. class Line:
  8.     positionA = [0, 0]
  9.     positionB = [0, 0]
  10.     def __init__(self,pointA, pointB):
  11.         self.positionA = pointA
  12.         self.positionB = pointB
  13.     def getlen(self):
  14.         self.length=m.sqrt((self.positionA[0]-self.positionB[0])^2+(self.positionA[1]-self.positionB[1])^2)
  15.         print("AB的长度为", self.length)


  16. xa=int(input('请输入点A的横坐标'))
  17. ya=int(input('请输入点A的纵坐标'))
  18. A = Point(xa,ya)

  19. xb=int(input('请输入点B的横坐标'))
  20. yb=int(input('请输入点B的纵坐标'))
  21. B = Point(xb,yb)



  22. AB=Line(A.position, B.position)

复制代码

请输入点A的横坐标5
请输入点A的纵坐标5
请输入点B的横坐标2
请输入点B的纵坐标2
>>> AB.getlen()
AB的长度为 0.0

在实例化点A和点B之后,点A的position也变成了[2,2],导致长度最后为0,实例化点B之前,A的position是[5,5],
是不是意味着如果一个类的某一个属性为列表的话,多次实例化之后,所有的实例的该属性都会变成最后一个实例的属性?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-8 23:26:17 | 显示全部楼层
把clas Point修改如下:
  1. class Point:
  2.     def __init__(self, x, y):
  3.         self.position=[0,0]
  4.         self.position[0] = x
  5.         self.position[1] = y
复制代码

另class Line的
positionA = [0, 0]
positionB = [0, 0]
可不要。
^改为**
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-3 12:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表