我有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
任何指导/帮助都将不胜感激。
答案 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将完全与超类完全相同的构造函数签名(这不是规则,但这是你在这里设置它的方式),所以你应该在同样的方式。
您还在代码的其余部分中使用fees
和myATM
进行切换,这似乎很奇怪。看起来您的意思是在所有情况下都使用fees
,而实际上根本不需要myATM
。