Python Python: modifying class from an inside function

AI Thread Summary
The discussion focuses on modifying a class attribute in Python using a method. The original code fails to update the class attribute correctly due to incorrect instance creation and method calling. The correct approach involves using `self.a` within the method and creating an instance with `t = Z()`. Additionally, the distinction between class attributes and instance attributes is emphasized, highlighting the need to understand their differences. The final solution successfully updates the class attribute as intended, demonstrating the proper usage of class methods in Python.
stargazer3
Messages
44
Reaction score
3
I feel very stupid right now. Should be an easy question, but I googled it to no avail.
Basically, I have an class.object in my code which should be managed by a class.function
For example, I want the following code:

Code:
class Z:
        a=0
        def mod(self):
                self.a=self.a+1

t=Z
print Z.a
t.mod
print Z.a
t.a+=1
print Z.a

to return "0 1 2", instead of "0 0 1"
Can it be done in Python? If yes, what is the Python way of doing so? If no, why not?
 
Last edited:
Technology news on Phys.org
stargazer3 said:
I feel very stupid right now. Should be an easy question, but I googled it to no avail.
Basically, I have an class.object in my code which should be managed by a class.function
For example, I want the following code:

Code:
class Z:
        a=0
        def mod(self):
                a
                a=a+1

t=Z
print Z.a
t.mod
print Z.a
t.a+=1
print Z.a

to return "0 1 2", instead of "0 0 1"
Can it be done in Python? If yes, what is the Python way of doing so? If no, why not?

I think you have several things wrong.
First, inside the mod function, I think you should have: self.a = self.a + 1
Second, when you create the object t as an instance of class Z, you should have: t = Z()
This invokes the constructor of Z.
Third, when you call the function mod you should have: t.mod()
Fourth, don't you want print t.a instead of print Z.a ??
 
Oh, I'm so sorry, was writing it in a hurry!
Yes, it's working right now, thanks!
...
I think that my face is quite red now.
 
Also, you need to keep in mind the difference between a class and an instance of it...class Z is already an object in its own right that can be dealt even before creating the instance t...so, you actually have 2 things going on and you need to learn how to deal with them...you have class attributes and instance attributes...go back and re-read classes...
 
Code:
## @file static.py
import sys

class Z: # declares a "class object"
    a = 0 # inited when Z is seen first
    @staticmethod
    def mod():
        Z.a += 1

t = Z # t is an alias reference on the Z "class object"
sys.stderr.write('\t' + str(t) + '\n')

print(Z.a)
t.mod()
print(Z.a)
t.a += 1
print(Z.a)

u = Z() # u is a Z instance
sys.stderr.write('\t' + str(u) + '\n')

u.mod() # actually works, contrary to C++ or Java statics! 
sys.stderr.write('\t' + str(Z.a) + '\n')

Usage
Code:
python static.py

Output:
Code:
	__main__.Z
0
1
2
	<__main__.Z instance at 0x7f5233334488>
	3

Tested with python 2.7 and python 3.1 on x86_64 Debian "squeeze" Linux

Regards, S.

P.S.: Pls keep in mind that "print" without brackets is outdated.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.

Similar threads

Replies
10
Views
1K
Replies
2
Views
1K
Replies
18
Views
1K
Replies
16
Views
2K
Replies
15
Views
2K
Back
Top