Skip to main content
 首页 » 编程设计

python之Python 中的方法重载 : more overloading

2025年05月04日9daizhj

这个问题不是另一个重载问题的重复,因为我试图在函数中引用 self.args。该问题中给出的答案并不令人满意,因为如果我执行该答案,我将得到一个错误。然而,在其他语言中,这很容易通过方法重载来完成...所以这个问题与另一个问题高度相关。

所以我有一个方法,

class learner(): 
      def train(a ton of arguments): 
            self.argA = argA,  
            etc. 

我只想用一个值调用 train,让它使用所有自调用来填充其他参数……但这是 python 似乎不支持的循环引用。理想情况下,我会写:

class learner(): 
    def train(self, position, data = self.data, alpha = self.alpha, beta = etc): 
          ...do a bunch of stuff 
 
    def roll_forward(self,position): 
          self.alpha += 1 
          self.beta += 1 
          self.train(position) 

我该怎么做?在其他语言中,我可以定义第二个访问内部变量的 train 函数...

目前,我有一个 janky hack,我这样做:

class learner(): 
     def train(...): 
             .... 
     def train_as_is(self,position): 
         self.train(position,self.alpha,self.beta, etc.) 

但这是一个相当大的类,大量类似的函数正在把我的代码变成意大利面条......

请您参考如下方法:

对其他答案的改进是使用默认字典:

def train(self, position, **kwargs): 
    defaults = { 
        'a': self.a, 
        'b': self.b, 
         ...etc... 
    } 
    defaults.update(kwargs) 
    ... do something with defaults 
 
def roll_forward(self,position): 
      self.alpha += 1 
      self.beta += 1 
      self.train(position)