Attribut nicht vorhanden?
Verfasst: Freitag 2. August 2019, 04:18
Hallo zusammen,
leider verstehe ich den Fehler in meinem Code nicht, vielleicht könnt ihr mir hier helfen.
Das ist der Programmcode:
Wenn ich das Programm ausführe bekomme ich die Fehlermeldung:
Die Klasse Objekt hat doch ein Attribut Grenzen, wieso kann ich diesen nicht aufrufen?
leider verstehe ich den Fehler in meinem Code nicht, vielleicht könnt ihr mir hier helfen.
Das ist der Programmcode:
Code: Alles auswählen
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
import scipy.integrate as integrate
from scipy.spatial.distance import pdist, squareform
from Box import Box
np.random.seed(0)
init_status = -0.5 + np.random.random((50,4))
init_status[2] = init_status[2] * 3.9
kiste = Box()
dt = 1. / 30
fig = plt.figure()
fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
ax = fig.add_subplot(111)
ax.set_xlim((-3,3))
ax.set_ylim((-3,3))
punkt, = ax.plot([],[],'ro',ms=6)
rechteck = plt.Rectangle(kiste.grenzen[0:3:2],kiste.grenzen[1]-kiste.grenzen[0],kiste.grenzen[3]-kiste.grenzen[2],ec='none',lw=2,fc='none')
ax.add_patch(rechteck)
def init():
global box, rechteck
punkt.set_data([],[])
return (punkt)
def animate(i):
global box,dt,ax,fig, rechteck
kiste.bewegen(i)
punkt.set_data(kiste.status[0], kiste.status[1])
return punkt
ani = animation.FuncAnimation(fig,animate,frames=600,interval=10,blit=True,init_func=init)
plt.show()
Code: Alles auswählen
import numpy as np
import matplotlib.pyplot as plt
class Box:
def _init_(self,init_status=[1,1,1,1],grenzen=[-2,2,-2,2],size=0.02):
self.init_status = np.asarray(init_status, dtype=float)
self.status = self.init_status.copy()
self.time_verstrichen = 0
self.grenzen = grenzen
self.size = size
def bewegen(self,dt):
self.time_verstrichen = self.time_verstrichen + dt
self.status[0:1:1] = self.status[0:1:1] + dt * self.status[2:3:1]
grenze_x1 = (self.state[0] < self.grenzen[0] + self.size)
grenze_x2 = (self.state[0] > self.grenzen[1] - self.size)
grenze_y1 = (self.state[1] < self.grenzen[2] + self.size)
grenze_y2 = (self.state[1] > self.grenzen[3] - self.size)
if(grenze_x1==True):
self.status[0] = (self.grenzen[0] + self.size)
self.status[2] = (self.status[2] * (-1))
elif(grenze_x2==True):
self.status[0] = (self.grenzen[1] - self.size)
self.status[2] = (self.status[2] * (-1))
else:
self.status[0] = (self.status[0])
if(grenze_y1==True):
self.status[1] = (self.grenzen[2] + slef.size)
self.status[3] = (self.status[3] * (-1))
elif(grenze_y2==True):
self.status[1] = (self.grenzen[3] - self.size)
self.status[3] = (self.status[3] * (-1))
else:
self.status[1] = self.status[1]
self.status[3] = self.status[3]
Code: Alles auswählen
rechteck = plt.Rectangle(kiste.grenzen[0:3:2],kiste.grenzen[1]-kiste.grenzen[0],kiste.grenzen[3]-kiste.grenzen[2],ec='none',lw=2,fc='none')
AttributeError: 'Box' object has no attribute 'grenzen'