0

私は初心者のプログラマーで、さまざまな銀行口座を追跡する銀行をシミュレートするプログラムを作成しています (何をしているのかわかりません。それを公開しているだけです)。新しく獲得したオブジェクト指向プログラミングの知識を練習します。 . プログラムを実行すると、アカウントを作成してリストに格納する Manager クラスの一部でエラーが発生します。エラーとともに、ソース コード全体を以下に掲載します。他に問題があると思われるものは自由に修正してください。コードを改善する方法を常に探しています。

# Virtual Bank
# 3/21/13

# Account Manager Class
class AccountManager(object):
    """Manages and handles accounts for user access"""
    # Initial
    def __init__(self):
        self.accounts = []

    # create account
    def create_account(self, ID, bal = 0):
        # Check for uniqueness? Possible method/exception??? <- Fix this
        account = Account(ID, bal)
        self.accounts.append(account)

    def get_account(self, ID):
        for account in self.accounts:
            if account.ID == ID:
                return account
            else:
                return "That is not a valid account. Sending you back to Menu()"
                Menu()

class Account(object):
    """An interactive bank account."""
    wallet = 0
    # Initial
    def __init__(self, ID, bal):
        print("A new account has been created!")
        self.id = ID
        self.bal = bal

    def __str__(self):
        return "|Account Info| \nAccount ID: " + self.id + "\nAccount balance: $" + self.bal


# Main        
AccManager = AccountManager
def Menu():
    print(
        """
0 - Leave the Virtual Bank
1 - Open a new account
2 - Get info on an account
3 - Withdraw money
4 - Deposit money
5 - Transfer money from one account to another
6 - Get exchange rates(Euro, Franc, Pounds, Yuan, Yen)
"""
        ) # Add more if necessary
    choice = input("What would you like to do?: ")
    while choice != "0":
        if choice == "1":
            id_choice = input("What would you like your account to be named?: ")
            bal_choice = float(input("How much money would you like to deposit?(USD): "))
            AccManager.create_account(ID = id_choice,bal = bal_choice)
            Menu()


Menu()

これがエラーです。AccManager の create_account メソッドが新しいアカウントをインスタンス化した後にエラーが発生します。

TypeError: create_account() takes at least 2 non-keyword positional arguments (0 given)
4

2 に答える 2

0

インスタンス メソッドとして定義create_accountしますが、クラス メソッドとして呼び出します。これを次のように変更してみてください。

@classmethod
def create_account(cls, ID, bal=0):
    ...

ただし、どこかで作成したアカウントを保持する必要がある場合がありますか?

于 2013-03-25T22:29:25.760 に答える
0

AccManager.create_accountバインドされていないメソッドです。つまり、どのオブジェクトにも属していません。したがって、呼び出すと、引数が期待されます

(self, ID, bal = 0)

ただし、self行の値なしで呼び出します

AccManager.create_account(ID = id_choice,bal = bal_choice)

AccManager オブジェクトを作成し、その create_accountメソッドを取得します。

am = AccManager() # Create object
while choice != "0":
        if choice == "1":
            id_choice = input("What would you like your account to be named?: ")
            bal_choice = float(input("How much money would you like to deposit?(USD): "))
            am.create_account(ID = id_choice,bal = bal_choice)
            Menu()
于 2013-03-25T22:30:46.903 に答える