使用变量创建类对象

时间:2018-04-12 21:59:44

标签: python class creation

这是我在这里的第一个问题,所以我希望我问'正确'的方式。下面的代码应该生成一个类对象,该对象应该通过最后的createAccount()函数命名。我期望该帐户是surname和dob的组合,但是它创建了名为accountName的类对象,而不是变量本身的产品。我可以看到为什么它正在这样做,但我看不出如何纠正它。

class Account(object):
    def __init__(self, balance):
        self.balance = balance

    def deposit(self,amount):
        self.balance += amount
        print(self.balance)
        return self.balance

    def withdraw(self,amount):
        if amount <= self.balance:
            self.balance -= amount
            print(self.balance)
            return self.balance
        else:
            print("You do not have sufficient funds for this transaction, please contact your local branch manager")

    def printBalance(self):
        print(self.balance)

def createAccount():
    name = input("Client Surname")
    dob = input("client Date of Birth")
    accountName = name+dob
    print(accountName) # for debug
    accountName = Account(0) # opening account balance is £0
    return accountName

2 个答案:

答案 0 :(得分:2)

我认为你想要的东西就像一个&#34;名称&#34;您的帐户对象中的字段。例如:

class Account(object):
    def __init__(self, name, balance):
        self.name = name
        self.balance = balance

. . .

def createAccount():
    name = input("Client Surname")
    dob = input("client Date of Birth")
    accountName = name + dob
    print(accountName) # for debug
    account = Account(accountName, 0.0) # opening account balance is £0
    return account

createAccount返回的对象包含帐户余额和帐户名称。

答案 1 :(得分:0)

您正在创建一个变量accountName,并为其分配一个文本字符串对象,其内容为出生名称和出生日期。

接下来,您正在破坏该问题并将accountName重新分配给您正在创建的新帐户对象。当您为其分配新内容时,accountName的旧值会丢失。

您需要做的是将name + dob传递给Account的 init 函数,并在该函数中,将传递的帐户名称分配给对象变量,例如self.accountName:

    def __init__(self, name, balance):
        self.accountName = name
        self.balance = balance
...
def createAccount():
    name = input("Client Surname")
    dob = input("client Date of Birth")
    account = Account(name+dob, 0) # opening account balance is £0
    return account

请注意,使用name+dob作为帐户名称是一个坏主意,因为稍后很难确定名称的结束位置和出生日期。但至少,这会让你开始。