Home > Mobile >  Inheritance of functions in classes not working Python
Inheritance of functions in classes not working Python

Time:12-29

I'm in doubt with this program of mine with inheritance, I don't know if I understand the concept wrong or the code is wrong (maybe both), but I really need some help.

The other functions are working, the only problem is when I try to access the Saving class function by the Account (Subclass).

class Savings:

    def __init__(self):
        self.money = 0
        self.statement = []

    def apply(self, value):
        self.money  = value
        self.statement.append(("Apply", f"${value}"))


class Accounts(Savings):

     def __init__(self, client: Client, bank: Bank):
       super().__init__()
        #other variables 

    def change_money(self):
        print("3 - Apply in Savings")
        choose = int(input("Choose: "))
        elif choose == 3:
             value = float(input("Value to apply: $").replace(",", "."))
             super().apply(value)
             print(super().money)
        else:
            pass

And when I try to access the money variable, it says

super().money    
AttributeError: 'super' object has no attribute 'money'

I made a test using only Accounts as Object and the money variable changed,

Input:

    a = Accounts()
    
    a.change_money()
    a.money

Output

3 - Apply in Savings
Choose: 3
Value to apply: $100

100.0

but Accounts and Savings are different classes and I need to access it and change from the Subclass

Please, can anyone help me ?

CodePudding user response:

You can use self.apply(value) instead:

class Savings:
    def __init__(self):
        self.money = 0
        self.statement = []

    def apply(self, value):
        self.money  = value
        self.statement.append(("Apply", f"${value}"))

class Accounts(Savings):
    def change_money(self):
        value = float(input("Value to apply: $"))
        self.apply(value)
        print(self.money)

a = Accounts()

a.change_money() # input, say, 10
print(a.statement) # [('Apply', '$10.0')]

Your object a inherits the method apply attached to itself, so a can call its own method by self.apply.

CodePudding user response:

You don’t need to call super as it is a pre defined function and is part of the savings accounts class. Just call self.apply(value)

  • Related