How does python handle a simultaneous reference to a variable via self and as a class attribute(static)? -
more importantly, if can explain output of following code.
class myclass:   num = 10   def mymethod(self):     print("prevvalue of self.num->",self.num)     print("prev value of myclass.num->",myclass.num)     self.num+=10     myclass.num+=20     print("postvalue of self.num->",self.num)     print("postvalue of myclass.num->",myclass.num)  obj1 = myclass() obj2 = myclass() obj2.mymethod() obj1.mymethod() the output of above code follows.
('prevvalue of self.num->', 10) ('prev value of myclass.num->', 10) ('postvalue of self.num->', 20) ('postvalue of myclass.num->', 30) ('prevvalue of self.num->', 30) ('prev value of myclass.num->', 30) ('postvalue of self.num->', 40) ('postvalue of myclass.num->', 50) the line 7, i.e self.num+=10 seems refer supposed class attribute num, , add value using self. next line same variable being accessed class variable. reasonable assume variable being used both static , self variable. how can variable both static , self variable ? (or there missing here)
the num attribute starts class attribute this:
 self.num+=10 can expanded self.num = self.num + 10 . what's happening is: first instance property called num, don't find it, class property called num, , use set instance property value. in moment have both instance , class property using same num name.
edit
the explanation above partially correct. first, num property searched iadd method , if fails find (which does, on account of num being of immutable type, try reassignation procedure above
Comments
Post a Comment