Python init()错误

时间:2016-04-04 21:32:06

标签: initialization arguments

class BankAccount:
  def __init__(self, deposit, withdraw, balance):
    self.balance = balance
    self.deposit = deposit
    self.withdraw = withdraw

    def balance(self):
      self.balance = balance

      def withdraw(self, amount):
        self.balance -= amount
        print 'self.balance'
        def deposit(self, amount):
          self.balance += amount
          print 'self.balance'

 a = BankAccount(90,40,1000)
 b = BankAccount(90,40,1000)
 a.deposit = 90
 b.deposit = 90
 b.withdraw = 40
 a.withdraw = 1000

class MinimumBalanceAccount(BankAccount):
  def __init__(self, minimum_balance=50):
    BankAccount.__init__(self)
    self.minimum_balance = minimum_balance

    def minimum_balance(self):
      self.minimum_balance = minimum_balance
      def withdraw(self, amount):
        if self.balance - amount < self.minimum_balance:
          print 'Sorry, minimum balance must be maintained.'

我正在尝试运行该程序,但显示内部错误时出现以下语法:内部错误:

THERE IS AN ERROR/BUG IN YOUR CODE
Results: 
Internal Error: runTests aborted: TestOutcomeEvent(handled=False, test=, result=, outcome='error', exc_info=(, TypeError('__init__() takes exactly 4 arguments (2 given)',), ), reason=None, expected=False, shortLabel=None, longLabel=None) is not JSON serializable

这是一个问题:

创建一个名为BankAccount的类

Create a constructor that takes in an integer and assigns this to a `balance` property.
Create a method called `deposit` that takes in cash deposit amount and updates the balance accordingly.
Create a method called `withdraw` that takes in cash withdrawal amount and updates the balance accordingly. if amount is greater than balance return `"invalid transaction"`
Create a subclass MinimumBalanceAccount of the BankAccount class

这是测试代码:

import unittest
class AccountBalanceTestCases(unittest.TestCase):
  def setUp(self):
    self.my_account = BankAccount(90)

  def test_balance(self):
    self.assertEqual(self.my_account.balance, 90, msg='Account Balance Invalid')

  def test_deposit(self):
    self.my_account.deposit(90)
    self.assertEqual(self.my_account.balance, 180, msg='Deposit method inaccurate')

  def test_withdraw(self):
    self.my_account.withdraw(40)
    self.assertEqual(self.my_account.balance, 50, msg='Withdraw method inaccurate')

  def test_invalid_operation(self):
    self.assertEqual(self.my_account.withdraw(1000), "invalid transaction", msg='Invalid transaction')

  def test_sub_class(self):
    self.assertTrue(issubclass(MinimumBalanceAccount, BankAccount), msg='No true subclass of BankAccount')

我不知道是什么原因。

1 个答案:

答案 0 :(得分:0)

在AccountBalanceTestCases中,您尝试通过传递一个参数(deposit = 90)来实例化BankAccount。另一方面,__init__方法需要另外两个参数,即撤销和平衡。

这会在执行期间导致以下错误:

init() takes exactly 4 arguments (2 given)

这意味着init收到了两个参数(隐含的'self'加上你传递的那个),但它实际上需要4.尝试在结构中再添加两个值,如:

self.my_account = BankAccount(90, 100, 110)

这会让你超过这个错误...