"object has no attribute" 即使它是在构造函数中定义的并且已经创建了一个对象的实例
"object has no attribute" even though it is defined in constructor and instance of an object has been created
也有类似的问题,但其中 none 有我正在寻找的答案。我正进入(状态:
AttributeError: 'ParticleFilter' object has no attribute 'initialCoordinates'
(function create_gaussian_particles) 即使我已经在 init 构造函数中定义并创建了它的一个实例,我不确定是什么问题,我试着自己查找,但没有,这是代码:
import numpy as np
class ParticleFilter(object):
def __init__(self, N, initialConditions, imageSize):
self.create_particles(N, initialConditions, imageSize)
self.create_weights(N)
self.imageSize = imageSize
self.initialCoordinates = np.array([initialConditions[0, 0], initialConditions[0, 1]])
self.initialStdDev = np.array([initialConditions[1, 0], initialConditions[1, 1]])
def create_particles(self, N, initialConditions, imageSize):
if initialConditions is None:
self.create_uniform_particles(N, imageSize)
else:
self.create_gaussian_particles(N, initialConditions)
def create_gaussian_particles(self, N, initialConditions):
self.particles = np.empty((N, 2))
self.particles[:, 0] = self.initialCoordinates[0] + (np.random.randn(N) * self.initialStdDev[0])
self.particles[:, 1] = self.initialCoordinates[1] + (np.random.randn(N) * self.initialStdDev[1])
def create_uniform_particles(self, N, imageSize):
pass
def create_weights(self, N):
pass
N = 1000
initialPosition = np.array([10, 10])
initialStdDev = np.array([5, 5])
initialConditions = np.array([initialPosition, initialStdDev])
imageSize = np.array([480, 360])
pf = ParticleFilter(N, initialConditions, imageSize)
File "c:/Projects/pf2.py", line 65, in <module>
pf = ParticleFilter(N, initialConditions, imageSize)
File "c://Projects/pf2.py", line 8, in __init__
self.create_particles(N, initialConditions, imageSize)
File "c://Projects/pf2.py", line 18, in create_particles
self.create_gaussian_particles(N, initialConditions)
File "c://Projects/pf2.py", line 22, in create_gaussian_particles
self.particles[:, 0] = self.initialCoordinates[0] + (np.random.randn(N) * self.initialStdDev[0])
AttributeError: 'ParticleFilter' object has no attribute 'initialCoordinates'
这里有几件事 - 首先,__ init __ is not a constructor。这可能看起来很迂腐,但重要的是不要把它想成一个。其次,如果您查看生成的堆栈跟踪,它会告诉您导致错误的事件的确切顺序。堆栈跟踪非常有用,而不仅仅是解释器在出现问题时发出的一堆噪音。当发生异常时,它们应该是您首先要看的东西。在这种情况下,您可以看到导致错误的行:
self.particles[:, 0] = self.initialCoordinates[0] + (np.random.randn(N) * self.initialStdDev[0])
在方法create_gaussian_particles(self, N, initialConditions)
中。查看之前的堆栈帧,我们可以看到在定义 initialCoordinates 之前从 __init__(...)
调用了 create_gaussian_particles(...)
。该代码以一种非常迂回的方式尝试在 属性 定义之前访问它。
也有类似的问题,但其中 none 有我正在寻找的答案。我正进入(状态:
AttributeError: 'ParticleFilter' object has no attribute 'initialCoordinates'
(function create_gaussian_particles) 即使我已经在 init 构造函数中定义并创建了它的一个实例,我不确定是什么问题,我试着自己查找,但没有,这是代码:
import numpy as np
class ParticleFilter(object):
def __init__(self, N, initialConditions, imageSize):
self.create_particles(N, initialConditions, imageSize)
self.create_weights(N)
self.imageSize = imageSize
self.initialCoordinates = np.array([initialConditions[0, 0], initialConditions[0, 1]])
self.initialStdDev = np.array([initialConditions[1, 0], initialConditions[1, 1]])
def create_particles(self, N, initialConditions, imageSize):
if initialConditions is None:
self.create_uniform_particles(N, imageSize)
else:
self.create_gaussian_particles(N, initialConditions)
def create_gaussian_particles(self, N, initialConditions):
self.particles = np.empty((N, 2))
self.particles[:, 0] = self.initialCoordinates[0] + (np.random.randn(N) * self.initialStdDev[0])
self.particles[:, 1] = self.initialCoordinates[1] + (np.random.randn(N) * self.initialStdDev[1])
def create_uniform_particles(self, N, imageSize):
pass
def create_weights(self, N):
pass
N = 1000
initialPosition = np.array([10, 10])
initialStdDev = np.array([5, 5])
initialConditions = np.array([initialPosition, initialStdDev])
imageSize = np.array([480, 360])
pf = ParticleFilter(N, initialConditions, imageSize)
File "c:/Projects/pf2.py", line 65, in <module>
pf = ParticleFilter(N, initialConditions, imageSize)
File "c://Projects/pf2.py", line 8, in __init__
self.create_particles(N, initialConditions, imageSize)
File "c://Projects/pf2.py", line 18, in create_particles
self.create_gaussian_particles(N, initialConditions)
File "c://Projects/pf2.py", line 22, in create_gaussian_particles
self.particles[:, 0] = self.initialCoordinates[0] + (np.random.randn(N) * self.initialStdDev[0])
AttributeError: 'ParticleFilter' object has no attribute 'initialCoordinates'
这里有几件事 - 首先,__ init __ is not a constructor。这可能看起来很迂腐,但重要的是不要把它想成一个。其次,如果您查看生成的堆栈跟踪,它会告诉您导致错误的事件的确切顺序。堆栈跟踪非常有用,而不仅仅是解释器在出现问题时发出的一堆噪音。当发生异常时,它们应该是您首先要看的东西。在这种情况下,您可以看到导致错误的行:
self.particles[:, 0] = self.initialCoordinates[0] + (np.random.randn(N) * self.initialStdDev[0])
在方法create_gaussian_particles(self, N, initialConditions)
中。查看之前的堆栈帧,我们可以看到在定义 initialCoordinates 之前从 __init__(...)
调用了 create_gaussian_particles(...)
。该代码以一种非常迂回的方式尝试在 属性 定义之前访问它。