0

出于某种原因,我无法概念化如何使用 Checkbook.class 对象而不是“ledger [list]”试图保持我的方法 OOP。实现本准则目标的最佳实践方法是什么?(是的,我也有其他“新手”问题,但我很乐意就此获得一些意见。)

import sys
import time

transNum=0
ledger = []
debitInput=['Check Number: ', 'Transaction Date: ',
            'Payee: ', 'Amount: ', 'Memo (or Enter to skip): ']
creditInput=['Check Number: ', 'Transaction Date: ',
            'Source: ', 'Amount: ', 'Memo (or Enter to skip): ']

# a Payee is a persistent record/lookup of current, past and new payees
class Payee:
    pass

# a Source is a persistent record/lookup of current, past and new sources
class Source:
    pass


# a Checkbook is a collection of Transaction objects upon which queries may be performed
class Checkbook:
    def __init__(self, newTrans):
        pass

# a Transaction is a collection of Debit and Credit objects
class Transaction:
    def __init__(self, chkNum, transDate, thirdParty, amount, memo=''):
        self.chkNum = chkNum
        self.transDate = transDate
        self.memo=memo
        self.thirdParty=thirdParty
        self.amount=amount
        self.transNum = transNum



class Debit(Transaction):
    def __init__(self, *args):
        Transaction.__init__(self, *args)
        self.payee=self.thirdParty
        del self.thirdParty
        self.amount=int(self.amount)*-1


class Credit(Transaction):
    def __init__(self, *args):
        Transaction.__init__(self, *args)
        self.source=self.thirdParty
        del self.thirdParty
        self.amount=int(self.amount)


while True:
    transact = []
    transNum += 1
    choice=input('Posting debit [d], credit [c] or [x] to exit: ')
    if choice == 'x': break
    elif choice == 'd':
        for field in debitInput:
            field = input(field)
            transact.append(field)
        trans = Debit(transact[0], transact[1], transact[2], transact[3], transact[4])
        ledger.append(trans)


    elif choice == 'c':
        for field in creditInput:
            field = input(field)
            transact.append(field)
        trans = Credit(transact[0], transact[1], transact[2], transact[3], transact[4])
4

1 回答 1

1
class Checkbook:

    def __init__(self):
        self.transactions = []    # Checkbook is just a wrapper around a list

    def __getitem__(self, index): # implementing [x]
        return self.transactions[index]

    def __setitem__(self, index, transaction): #implementing [x] = i
        self.transactions[index] = transaction

    def append(self, transaction): # implementing .append(x)
        self.transactions.append(transaction)

    def extend(self, transaction_list): # implementing .extend([x,y,z])
        self.transactions.extend(transaction_list)

    # and so on for every method which you want to support

或者你可以子类化list.

这是做功课吗?在 Python 中分配它是愚蠢的。你永远不会真正想要子类化list。我在大学里有一个更好的练习,我必须重新实现一个std::vectorusing 模板、一个动态数组(with malloc())和运算符重载......多么有趣!练习std::map更好:)

于 2013-06-05T23:33:56.447 回答