Quote:You need to show the complete code that doesn't work.
In general, you can declare variables (also called fields) in classes that are "local" to that class. In your examples, the Sur class in class0.py declares a result field and initializes it as a list:
I'm just not able to conceptualize list in oop. I get the codes to work (by debugging & trial/error) but the logic confuses me...especially with list in constructor methods...ijdu
for example this code works...I'm faithful to keeping each function simple and doing 1 single task. please see code comments for my questions pertaining to the [].
#class.py import random class Die(): def __init__(self,sides=6): #here are my instance variables(object characteristics come from these) AKA attributes/fields #[] is treated as an attribute(field) Why? it should not be but it is #why? (obviously I can memorize this as an exception to the rule (lists and fields in __init__) it's fine...i just don't understand the why... self.sides = sides self.throws=[] def roll(self,turn):#turn field doesn't 'exist' prior to this method. #so no pt in defining in constructor method...I sort of understand this...it's fine self.turn = random.randint(1,self.sides)#random is inclusive, range is excl. pretty annoying return self.turn def update_rolls(self): self.throws.append(self.turn) return self.throws def print_list(self): for t in self.throws: print('die is -',t)
#run.py from class import Die die = Die() results=[]#if I delete this I get an attribute error that die obj has no attribute named update_rolls. #update_rolls is a method not an attribute.It just uses the [] attribute for i in range(1,3): t=die.roll(i) die.update_rolls() #so this is a func...clearly...but if I delete results =[] python thinks update_rolls() is intended as attribute? die.print_list()Maybe I'm overthinking this but why is my list a field (in __init__)? Is it because my other methods use it? If I create all class variables in the constructor method why can I create the variable 'turn' in the roll() method? Basically I am forced to create list[] in __init__ but all other fields through any function? Very confused...