Python类 - 方法

时间:2016-05-10 22:57:34

标签: python

所以我正在尝试创建一个程序,其中包含一个名为" Loan"它计算带有数据字段的汽车的每月付款和总付款。我猜测我的错误是由方法中的方法(getMonthlyPayment())引起的(getTotalPayment)。如何在方法中放置方法?或者我的问题有另一种解决方案吗?

谢谢!
我的错误是:

Traceback (most recent call last):
  File "C:\Users\ericl_000\Desktop\Python\HW 5 ( Python ).py", line 38, in <module>
    main()
  File "C:\Users\ericl_000\Desktop\Python\HW 5 ( Python ).py", line 37, in main
    print("The total payment is ", loan.getTotalPayment())
  File "C:\Users\ericl_000\Desktop\Python\HW 5 ( Python ).py", line 27, in getTotalPayment
    return getMonthlyPayment * self.__NumYearsLoans * 12
NameError: name 'getMonthlyPayment' is not defined
>>>
  class Loan:
    def __init__(self, AnnIntRate = 1.0, NumYearsLoans = 1.0, LoanAmt = 1.0, BoName = " "):
        self.__AnnIntRate = AnnIntRate
        self.__NumYearsLoans = NumYearsLoans
        self.__LoanAmt = LoanAmt
        self.__BoName = BoName
    def getAnnIntRate(self):
        return self.__AnnIntRate
    def getNumYearsLoans(self):
        return self.__NumYearsLoans
    def getLoanAmt(self):
        return self.__LoanAmt
    def getBoName(self):
        return self.__BoName
    def setAnnIntRate(self,AnnIntRate):
        self.__AnnIntRate = AnnIntRate
    def setNumYearsLoans(self,NumYearsLoans):
        self.__NumYearsLoans = NumYearsLoans
    def setLoanAmt(self,LoanAmt):
        self.__LoanAmt = LoanAmt
    def setBoName(self,BoName):
        self.__BoName = BoName
    def getMonthlyPayment(self):
        monthlyIntRate = self.__AnnIntRate / 1200
        return self.__LoanAmt * monthlyIntRate / ( 1 - ( 1 / ( 1 + monthlyIntRate) ** ( self.__NumYearsLoans * 12 )))
    def getTotalPayment(self):
        return getMonthlyPayment() * self.__NumYearsLoans * 12
    def main():
        YearlyIntRate = float(input("Enter yearly interest rate, for example, 7.25: "))
        NumOfYears = float(input("Enter number of years as an integer: "))
        LoanAmount = float(input("Enter loan amount, for example, 120000.95: "))
        BorrowerName = input("Enter a borrow's name: ")
        loan = Loan(YearlyIntRate,NumOfYears,LoanAmount,BorrowerName)
        print("The loan is for ", loan.getBoName())
        print("The monthly payment is ", loan.getMonthlyPayment())
        print("The total payment is ", loan.getTotalPayment())
    main()

1 个答案:

答案 0 :(得分:0)

就像访问成员一样,您需要使用self.预先对方法进行所有访问。

getTotalPayment()更改为

return self.getMonthlyPayment() * self.__NumYearsLoans * 12

另外,看看property,让吸气剂和制定者不那么痛苦。但是,大多数情况下,您甚至不应该在Python中定义getter和setter。在惯用Python中,私密性通常不被视为一个概念。