缺少2个必需的位置参数-Classmethod Python

缺少2个必需的位置参数-Classmethod Python,python,python-3.x,class-method,Python,Python 3.x,Class Method,对不起,我为此挣扎了很长一段时间。我尝试使用函数totalPayments,它使用monthlyPayment类函数,参数在初始化阶段传递。我遇到一个错误,缺少2个必需的位置参数 class Loan(object): def __init__(self, asset, face, rate , term): self._asset = asset self._face = face self._rate = rate self._t

对不起,我为此挣扎了很长一段时间。我尝试使用函数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,我应该修改我的def monthlyPayment函数以接受参数

您得到的堆栈错误是:

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
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'
回溯(最近一次呼叫最后一次):
文件“C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py”,第16行,在
打印(l.totalPayments())
文件“C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py”,第13行,总计付款
报税表(自付月费(自付)*自付期限)
TypeError:monthlyPayment()缺少2个必需的位置参数:“rate”和“term”
这里的线索是,
monthlyPayment()
方法给出了缺少2个参数的错误。此方法需要向其传递3个参数(不包括self),第4个参数是可选的

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

但是,当您从
totalPayments
方法调用此函数时,您只传递一个参数,即self

return(自付月费(自付)*自付期限)


您不需要传递self,它将自动传递,因此您需要传递其他3个预期参数
face、rate、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'
回溯(最近一次呼叫最后一次):
文件“C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py”,第16行,在
打印(l.totalPayments())
文件“C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py”,第13行,总计付款
报税表(自付月费(自付)*自付期限)
TypeError:monthlyPayment()缺少2个必需的位置参数:“rate”和“term”
这里的线索是,
monthlyPayment()
方法给出了缺少2个参数的错误。此方法需要向其传递3个参数(不包括self),第4个参数是可选的

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

但是,当您从
totalPayments
方法调用此函数时,您只传递一个参数,即self

return(自付月费(自付)*自付期限)


您不需要传递self,它将自动传递,因此您需要传递从实例(
self
)调用的
monthlyPayment

的其他3个预期参数
face
rate
term
,并且您没有提供
face
的参数

它也不应该是classmethod,因为您使用实例的属性:

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)

您正在从实例(
self
)调用
monthlyPayment
),并且没有为
face
rate
term
提供参数

它也不应该是classmethod,因为您使用实例的属性:

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)

您只向定义为需要三个参数的函数传递一个参数。请澄清错误在多大程度上出乎您的意料和/或不清楚。请注意,您首先将该方法定义为classmethod的原因完全不清楚-它不使用类,它使用类实例的所有字段,您只需将一个参数传递给一个定义为需要三个参数的函数。请澄清错误在多大程度上出乎您的意料和/或不清楚。请注意,您完全不清楚为什么首先将该方法定义为classmethod-它不使用类,它接受类实例的所有字段,并向其传递一个类实例。