Pergunta

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?

Foi útil?

Solução

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

Outras dicas

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()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top