簡體   English   中英

缺少 2 個必需的位置參數 - Classmethod Python

[英]Missing 2 required positional arguments - Classmethod Python

對不起,我在這方面掙扎了很長一段時間。 我正在嘗試使用函數 totalPayments,該函數使用具有在初始化階段傳遞的參數的monthlyPayment 類函數。 我收到一個錯誤,缺少 2 個必需的位置參數

class Loan(object):
   def __init__(self, asset, face, rate , term):
       self._asset = asset
       self._face = face
       self._rate = rate
       self._term = term

   @classmethod
   def monthlyPayment(cls,face,rate,term,period=None):
       return ((rate*face*((1+rate)**term)))/(((1+rate)**term)-1)

   def totalPayments(self):
       return (self.monthlyPayment(self) * self._term) 

l = Loan(None,1000,0.025,10)
print(l.totalPayments()) # gets an error missing 2 required positional arguments

編輯:非常感謝您的 hekp,我應該修改我的 defmonthlyPayment 函數以接收參數

您正在從實例 ( self ) 調用monthlyPayment ,並且您沒有提供facerateterm

它也不應該是類方法,因為您使用實例的屬性:

class Loan(object):
   def __init__(self, asset, face, rate , term):
       self._asset = asset
       self._face = face
       self._rate = rate
       self._term = term

   def monthlyPayment(self, period=None):
       return ((self._rate*self._face*((1+self._rate)**self._term)))/(((1+self._rate)**self._term)-1)

   def totalPayments(self):
       return (self.monthlyPayment() * self._term)

你得到的堆棧錯誤是:

Traceback (most recent call last):
  File "C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py", line 16, in <module>
    print(l.totalPayments())
  File "C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py", line 13, in totalPayments
    return (self.monthlyPayment(self) * self._term)
TypeError: monthlyPayment() missing 2 required positional arguments: 'rate' and 'term'

這里的線索是它的monthlyPayment()方法給出了缺少2 個參數的錯誤。 此方法需要傳遞給它的 3 個參數(不包括 self),第 4 個參數是可選的。

def monthlyPayment(cls,face,rate,term,period=None):

但是當您從totalPayments方法調用它時,您只傳遞一個參數,即 self.

return (self.monthlyPayment(self) * self._term)

你不需要傳遞 self,它會自動傳遞,所以你需要傳遞其他 3 個預期的參數face,rate,term

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM