鱼C论坛

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

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

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

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

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

x
import math as m

class Point:
    position=[0,0]
    def __init__(self, x, y):
        self.position[0] = x
        self.position[1] = y

class Line:
    positionA = [0, 0]
    positionB = [0, 0]
    def __init__(self,pointA, pointB):
        self.positionA = pointA
        self.positionB = pointB
    def getlen(self):
        self.length=m.sqrt((self.positionA[0]-self.positionB[0])^2+(self.positionA[1]-self.positionB[1])^2)
        print("AB的长度为", self.length)


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

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



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],
是不是意味着如果一个类的某一个属性为列表的话,多次实例化之后,所有的实例的该属性都会变成最后一个实例的属性?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-8 23:26:17 | 显示全部楼层
把clas Point修改如下:
class Point:
    def __init__(self, x, y):
        self.position=[0,0]
        self.position[0] = x
        self.position[1] = y
另class Line的
positionA = [0, 0]
positionB = [0, 0]
可不要。
^改为**
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-8 00:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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