Hi,
I'm a great scripter, but just learning programming (using Python).
I'm very much a newbie at this, so please be patient as I'm sure these will seem so basic a questions and may seem stupid to those experienced.
I'm reading a python book right now that has me thinking about variables.
As the title says, what does "x=5" really mean?
What is the "5" being assigned to? Is "x" considered an "instance" of "int?"
If I do this:
>>> class test(int):
pass
>>> x=test(5)
>>> x
5
>>>
Then x here is an instance of class test(), a subclass of int.
But with int, you can do x=5.
If I do that after the above code, then x is no longer an instance of test() but is a variable of type int().
In the above, what is the 5 actually being assigned to in the instance of test()?
I have accessed it by defining a class and doing this just messing around:
>>> class test2(int):
def value(self):
print self
self += 1
print self
>>> x=test2(5)
>>> x
5
>>> x.value()
5
6
>>> x
5
Why doesn't the value of x change to 6 in the above example? I'm I "redefining" self in the value() method to no longer reflect what is self in the instance?
Also, can I "hijack" what x=5 means to to add my own methods, but it still behave like x=5. What I mean might be explained by this code:
#do whatever code here to "hijack" int()
>>> x=5
>>> x
5
>>> x.make_negative
>>> x
-5
>>> x=-2
>>> x
-2
>>> x.make_negative
>>> x
2
Or something like that?
If there is no way to do that and we go back to my original subclass definition, how do I change the value of the instance of the class to another value?
In:
>>> x=5
>>> x += 1
>>> x
6
How does the value of x become incremented internally? What magic is happening behind the scenes?
Say I want to do what is verboten in Python. Make in C-like incrementor like this.
>>> class Incrementor(int):
def incAfter (self): # equivalent of x++
#do whatever to access the value of instance
return VALUE_OF_INSTANCE # as in x=Incrementor(5)
VALUE_OF_INSTANCE += 1 # not quite sure how to do this to make it increment after returning the value (perhaps it is imporssible). Help here would be appreciated, too.
def incBefore(self): # equivalent of ++x
VALUE_OF_INSTANCE += 1
return VALUE_OF_INSTANCE # as in x=Incrementor(5)
So that I could do something like this:
>>> x = Incrementor(5)
>>> x
5
>>> print x.incAfter()
5
>>> x
6
>>> print x.incBefore()
7
>>> x
7
Helping me with the concepts would really go a long way for me. Any help would be greatly appreciated.
Thankfully,
Narnie