2016-10-28 5 views
1

Я прочитал другие сообщения об этой ошибке, и я решил, что решил эту проблему, но у меня все еще есть проблемы.__init __() принимает 1 позиционный аргумент, но 2 дано

Я включил необходимую 'я' в соответствующем месте, но я до сих пор появляется ошибка:

Traceback (most recent call last): 
    File "...", line 30, in <module> 
    JohnSmith = CheckingAccount(20000) 
    File "...", line 18, in __init__ 
    BankAccount.__init__(self, initBal) 
TypeError: __init__() takes 1 positional argument but 2 were given 

class BankAccount (object): 
     # define class for bank account 
     def __init__ (self): 
      # initialize bank account w/ balance of zero 
      self.balance = 0 
     def deposit (self, amount): 
      # deposit the given amount into account 
      self.balance = self.balance + amount 
     def withdraw (self, amount): 
      # withdraw the given amount from account 
      self.balance = self.balance - amount 
     def getBalance (self): 
      # return account balance 
      return self.balance 

class CheckingAccount (BankAccount): 
    def __init__ (self, initBal): 
     BankAccount.__init__(self, initBal) 
     self.checkRecord = {} 
    def processCheck (self, number, toWho, amount): 
     self.withdraw(amount) 
     self.checkRecord[number] = (toWho, amount) 
    def checkInfo (self, number): 
     if self.checkRecord.has_key(number): 
      return self.checkRecord [ number ] 
     else: 
      return 'No Such Check' 

# create checking account 
JohnSmith = CheckingAccount(20000) 
JohnSmith.processCheck(19371554951,'US Bank - Mortgage', 1200) 
print (JohnSmith.checkInfo(19371554951)) 
JohnSmith.deposit(1000) 
JohnSmith.withdraw(4000) 
JohnSmith.withdraw(3500) 
+5

'BankAccount .__ init__' принимает только' self' как аргумент, но вы также передаете его 'initBal'. Поэтому либо измените 'BankAccount .__ init__', чтобы взять начальный баланс, либо прекратить передавать его. –

+0

Возможный дубликат [TypeError: \ _ \ _ init \ _ \ _() принимает 1 позиционный аргумент, но 4 даны] (http://stackoverflow.com/questions/37350161/typeerror-init-takes-1-positional-argument -but-4-are-given) –

ответ

2

Вы, вероятно, хотите переопределить BankAccount в

class BankAccount(object): 
    def __init__(self, init_bal=0): 
     self.balance = init_bal 

    # ... 
1

Вы можете написать конструктор BankAccount как

def __init__(self, initbal=0) 
    self.balance = initbal 
+0

Спасибо вам; Я сделал предложенные изменения, и все работает сейчас. –

1
class CheckingAccount(BankAccount): 
    def __init__(self, initBal): 
     super().__init__() 
     self.balance = initBal 
     self.checkRecord = {} 

Нечто подобное поможет вам начать работу. Я также изменил

if self.checkRecord.has_key(number): 

в

if number in self.checkRecord: 

Вы не когда-либо использовать initBal или присвоить его переменной, я предполагаю, что это должно быть self.balance

Я также использовал супер здесь, который будет только работать на python 3. Он позволяет вам изменить имя BankAccount в будущем без необходимости реорганизации вашего кода. Если вы можете использовать его, я настоятельно рекомендую его, это хорошая практика. В противном случае решение равно

class CheckingAccount(BankAccount): 
    def __init__(self, initBal): 
     BankAccount.__init__(self) 
     self.balance = initBal 
     self.checkRecord = {} 
Смежные вопросы