TypeError:无法解决的类型:atm()> = int()

时间:2015-04-25 04:45:24

标签: python inheritance python-3.x override typeerror

我有3个类,ATM(主类),atmFees(ATM的子类)和事务。我希望我的类atmFees继承父类ATM中的方法。

atmFees类将atm对象作为参数,使用atm.__init__(self, balance)初始化

我想覆盖父/超类的“撤销”方法,修改其中一个参数 - 从amount减去50美分 - 然后使用新的atm访问超级方法量。

这样做会返回TypeError: unorderable types: atm() >= int()

我完全不知道该怎么做,我几乎改变了一切,但似乎无法让它发挥作用。

import transaction
import random

class atm(object):

    def __init__(self, bal):
        self.__balance = bal
        self.transactionList = []

    def deposit(self, name, amount):
        self.__balance += amount
        ndt = transaction.Transaction(name, amount)
        self.transactionList.append(ndt)

    def withdraw(self, name, amount):
        if self.__balance >= amount:
            self.__balance -= amount
            nwt = transaction.Transaction(name, amount)
            self.transactionList.append(nwt)
        else:
            print('Uh oh, not enough money!')

    def get_balance(self):
        return self.__balance

    def __str__(self):
        string_return = "" 
        for transaction in self.transactionList:
            string_return += str(transaction) + "\n"
        string_return = '\n' + 'The balance is $' + format(self.__balance, ',.2f')
        return string_return

class atmFee(atm):

    def __init__(self, balance):
        atm.__init__(self, balance)

    def widthrawal(cls, name, amount):
        amount = amount - .50
        atm.widthrawal(cls, name, amount)

    def deposit():
        pass

def main():

    myATM = atm.atm(75)
    fees  = atm.atmFee(myATM)

    fees.withdraw("2250",30)
    fees.withdraw("1000",20)
    myATM.deposit("3035",10)

    print("Let's withdraw $40")
    if myATM.withdraw("Amazon Prime",40) == 0:
        print ("Oh noes! No more money!")

    print()
    print("Audit Trail:")
    print(myATM)

main();

完整代码发布在此处: https://gist.github.com/markbratanov/e2bd662d7ff83ca5ef61

任何指导/帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

错误消息意味着它所说的内容 - 您无法订购对象和整数。这在Python 2中是可能的(出于某种原因),其中排序基本上是任意的(例如,空字典{}总是大于整数,无论​​多大......),但它不是在Python 3中,因为比较没有意义。

答案 1 :(得分:1)

您可以像这样创建ATM对象:

myATM = atm.atm(75)
fees  = atm.atmFee(myATM)

所以myATM本身就是一个ATM对象,作为余额传入atmFee.__init__。在withdraw中,您希望余额为数字而不是ATM对象(如果比较有效,则对其执行的算法将失败)。你几乎肯定要通过创建这样的对象来将余额设置为数字:

fees = atm.atmFee(75)

请注意,atmFee将完全与超类完全相同的构造函数签名(这不是规则,但这是你在这里设置它的方式),所以你应该在同样的方式。

您还在代码的其余部分中使用feesmyATM进行切换,这似乎很奇怪。看起来您的意思是在所有情况下都使用fees,而实际上根本不需要myATM