Domanda

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?

È stato utile?

Soluzione

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

Altri suggerimenti

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.

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top