建立了一個二維串列,串列里放一個自定義的class,但是在對一個實體進行append操作后二維串列里所有的實體都變了,之前學過c++,感覺是賦值的時候變成傳址了,python剛學,請問怎樣才能消除串列里每個實體的關聯,代碼如下
class Grid:
pointx=[]
pointy=[]
pointz=[]
pointNum=0
minZ=100
minZRange=0
def __init__(self,pNum):
pointNum=pNum
minZ=100
minZRange=0
def AddPoint(self,pointX,pointY,pointZ):
self.pointx.append(pointX)
self.pointy.append(pointY)
self.pointz.append(pointZ)
self.pointNum += 1
def findMinZ(self):
size=self.pointNum
index=-1
if size==0:
return index
z=100.0
range=0
for i in range(size):
if self.pointz[i]<z:
z=self.pointz[i]
range=math.sqrt(self.pointx[i]**2+self.pointy[i]**2)
self.minZ=z
self.minZRange=range
return index
hor=120
ver=100
grid=[]
for i in range(hor):
grid.append([])
for j in range(ver):
grid[i].append(Grid(0))
pointXYZ=np.loadtxt("lidarData.txt",encoding='bytes')
i=0
for i in range(27000):
range=math.sqrt(pointXYZ[i][0]**2+pointXYZ[i][1]**2)
gHor=int(math.atan2(pointXYZ[i][1],pointXYZ[i][0])/3.14*180-30)
gVer=int(range/0.25)
if gHor<120 and gHor>-1 and gVer<100 and gVer>-1:
grid[gHor][gVer].AddPoint(pointXYZ[i][0],pointXYZ[i][1],pointXYZ[i][2])
uj5u.com熱心網友回復:
class Grid:pointx=[]
pointy=[]
pointz=[]
pointNum=0
minZ=100
minZRange=0
這些都屬于Grid類的變數,而不是實體變數了!類的變數就相當于C++中類的靜態變數了。
所以,你應該把這些需要的變數放在__init__初始化函式的引數串列中!
uj5u.com熱心網友回復:
所以,將
class Grid:
pointx = []
pointy = []
pointz = []
pointNum = 0
minZ = 100
minZRange = 0
def __init__(self, pNum):
pointNum = pNum
minZ = 100
minZRange = 0
改成:
class Grid:
def __init__(self, pNum):
self.pointNum = pNum
self.minZ = 100
self.minZRange = 0
self.pointx = []
self.pointy = []
self.pointz = []
其它地方保持不變就行了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/75126.html
上一篇:入門問題
