Indradhanush Gupta
Indradhanush Gupta

Reputation: 4237

How to access a class variable from another class in python?

I have the following code segment :

class A:
    def __init__(self):
        self.state = 'CHAT'

    def method1(self):
        self.state = 'SEND'

    def printer(self):
        print self.state


class B(A):
    def method2(self):
        self.method1()
        print self.state

ob_B = B()
ob_A = A()
ob_B.method2()
ob_A.printer()

This gives me the output :

SEND
CHAT

I want it to print :

SEND
SEND

That is, when B.method2 is modifying self.state by calling self.method1, I want it to modify the already existing value of self.state = 'CHAT' in A's instance. How can I do this?

Upvotes: 2

Views: 21289

Answers (3)

Ansuman Bebarta
Ansuman Bebarta

Reputation: 7256

You can call the printer() method by using object of B so that you will get the updated value.

ob_B = B()
ob_A = A()
ob_B.method2()
ob_B.printer()

Upvotes: 0

James
James

Reputation: 2795

ob_B = B()
ob_A = A()
ob_B.method2()
ob_A.printer()

You need to call ob_B.method2() -- without the parentheses that statement is just a reference to the function and doesn't actually call it.

Upvotes: 0

jamylak
jamylak

Reputation: 133564

The instance is passed as the first argument to each of your methods, so self is the instance. You are setting instance attributes and not class variables.

class A:

    def __init__(self):
        A.state = 'CHAT'

    def method1(self):
        A.state = 'SEND'

    def printer(self):
        print A.state


class B(A):
    def method2(self):
        self.method1()
        print B.state

ob_B = B()
ob_A = A()
ob_B.method2()
ob_A.printer()

SEND
SEND

Upvotes: 5

Related Questions