0
votes

__STR __ (auto) fonction ne fonctionne pas pour l'impression d'objets en python

J'ai travaillé sur l'amélioration de l'utilisation de classes et d'objets à Python, mais j'ai eu du mal à afficher les valeurs d'objets différents de mes programmes. J'étais enseigné par mon instructeur que l'utilisation de la fonction str for forte> (auto) sera automatiquement appelée chaque fois qu'un objet est passé la fonction d'impression (), toutefois, la sortie affiche toujours l'adresse de l'objet en mémoire plutôt que valeur. J'ai documenté mon code ci-dessous l'a rencontrée dans deux programmes de compilation différents, mais je ne trouve toujours pas où mon erreur se produit.

# the class of the bank account
class BankAccount:
    def __init__(self, bal):
        self.__balance = bal

# deposits the amount given by the user
def deposit(self, amount):
    self.__balance += amount

# withdraws the amount given by the user
def withdraw(self, amount):
    if(self.__balance >= amount):
        self.__balance -= amount
    else:
        print("Error: Insufficient funds")

# returns the current balance of the user's account
def get_balance(self):
    return self.__balance

# sets the user's account given a specified balance
def set_balance(self, bal):
    self.__balance = bal

# prints the user's balance
def __str__(self):
    return "The balance is $" + format(self.__balance, ",.2f")

def main():
    start_bal = float(input("Enter your starting balance: ")) # retrieves balance from the user
    savings = BankAccount(start_bal) # creates an object that hold's the user's balance
    print(savings)

main()


3 commentaires

Vous avez un problème avec le formatage, besoin d'indenter defs


Ces fonctions ne sont pas à l'intérieur de la classe, seulement __ init __ est dans votre classe, vous devez formater votre code correctement.


Merci tous étaient corrects! Cependant, j'ai une question. Savez-vous pourquoi les fonctions doivent être en retrait dans la classe? Pourquoi ne suis-je pas capable de les utiliser correctement, même s'ils ont été déclarés au sein du programme?


3 Réponses :


0
votes

Vous devez écraser le __ str __ Opérateur de votre BankAccount Classe: XXX

Il suffit de nier votre méthode correctement dans votre classe


0 commentaires

1
votes

C'est un problème d'indentation, votre classe est définie comme celle-ci uniquement:

# the class of the bank account
class BankAccount:
    def __init__(self, bal):
        self.__balance = bal

    # deposits the amount given by the user
    def deposit(self, amount):
        self.__balance += amount

    # withdraws the amount given by the user
    def withdraw(self, amount):
        if(self.__balance >= amount):
            self.__balance -= amount
        else:
            print("Error: Insufficient funds")

    # returns the current balance of the user's account
    def get_balance(self):
        return self.__balance

    # sets the user's account given a specified balance
    def set_balance(self, bal):
        self.__balance = bal

    # prints the user's balance
    def __str__(self):
        return "The balance is $" + format(self.__balance, ",.2f")

def main():
    start_bal = float(input("Enter your starting balance: ")) # retrieves balance from the user
    savings = BankAccount(start_bal) # creates an object that hold's the user's balance
    print(savings)

main()


0 commentaires

0
votes

Lorsque l'appel est principal et dans l'impression (économies) est exécuté, il imprime la représentation STR de la classe BankAccount, qui est l'adresse de la mémoire d'épargne, puis puisque votre implémentation str est définie le côté de la classe. Cela n'a rien à voir avec la classe.

Essayez ceci: xxx


0 commentaires