我正在尝试在python中创建一个Point类.我已经有了一些函数,比如__ str__或__ getitem__,它运行得很好.我面临的唯一问题是我的__ setitem__的实现不起作用,其他人都做得很好.
这是我的Point类,最后一个函数是我的__ setitem__:
class point(object):
def __init__(self,x=0,y=0):
self.x=x
self.y=y
def __str__(self):
return "point(%s,%s)"%(self.x,self.y)
def __getitem__(self,item):
return (self.x, self.y)[item]
def __setitem__(self,x,y):
[self.x, self.y][x]=y
Run Code Online (Sandbox Code Playgroud)
它应该像这样工作:
p=point(2,3)
p[0]=1 #sets the x coordinate to 1
p[1]=10 #sets the y coordinate to 10
Run Code Online (Sandbox Code Playgroud)
(我甚至是对的,如果setitem像这样工作吗?)谢谢!
设置self.data并仅self.data保持坐标值.如果self.x和self.y是还存储这些值是有机会self.data和self.x或self.y将不会持续更新.
相反,make x和y 属性可以查找其值self.data.
class Point(object):
def __init__(self,x=0,y=0):
self.data=[x, y]
def __str__(self):
return "point(%s,%s)"%(self.x,self.y)
def __getitem__(self,item):
return self.data[item]
def __setitem__(self, idx, value):
self.data[idx] = value
@property
def x(self):
return self.data[0]
@property
def y(self):
return self.data[1]
Run Code Online (Sandbox Code Playgroud)
该声明
[self.x, self.y][x]=y
Run Code Online (Sandbox Code Playgroud)
有趣但有问题.让它分开:
[self.x, self.y]导致Python构建一个新的列表,包含值self.x和self.y.
somelist[x]=y导致Python来值分配y到x的个索引somelist.所以这个新列表somelist会更新.但是,这有没有影响self.data,self.x或self.y.这就是你的原始代码不起作用的原因.
| 归档时间: |
|
| 查看次数: |
26249 次 |
| 最近记录: |