私はクラスを持っています。以下に示すように、いくつかのパラメータと属性を持っています。しかし、positionの関数setterに到達し、copy()関数を実行すると、エラーメッセージが表示されます。RuntimeError:Pythonオブジェクトを呼び出すときに最大再帰深度を超過しました。 deepcopy()またはimport sys sys.setrecursionlimit(10000)のような異なるオプションを試しましたが、いずれもうまくいきませんでした。これは私のコードです:Python:コピー関数を呼び出すときにPythonオブジェクトを呼び出すときに最大再帰深度を超えました
def initCost(n):
a = random.randint(0,10) #gram.
b = random.randint(0,5) #price
return [random.randint(0,a*b) for i in range(n)]
costs = initCost(10)
class Particle:
def __init__(self, n, maxWeight):
self.position = [random.randint(0,1) for i in range(n)] #position
self.velocity = [0 for i in range(n)] #velocity
#self.fit = self.fitness(self.position)
self.bp = self.position.copy() #best position
self.bf = self.fit #best fitness
self.evaluate()
def fit(self, x):
fitt = 0
for i in range(len(x)-1):
if (x[i] == 1):
fitt = fitt + costs[i]
return fitt
def evaluate(self):
""" evaluates the particle """
self.fitness = self.fit(self.position)
@property
def position(self):
return self.position
@property
def bp(self):
return self.bp
@property
def bf(self):
return self.bf
@position.setter
def position(self, newPosition):
self.position = newPosition.copy()
#self.position = newPosition[:]
self.evaluate()
# automatic update of particle's memory
if (self.fit<self.bf):
self.bp = self.position
self.bf = self.fit
私はPythonのゲッターとセッターのことを100%熟知しているわけではありませんが、このクラスのオブジェクトをインスタンス化するときに最初に行うことは、 'self.position'は' list'を参照します。 – TigerhawkT3
@ TigerhawkT3:いいえ、彼らは呼び出されて、もう一度呼び出されました... – user2357112
@ user2357112:私が作っている間違いを教えてください。 – Nelly