【问题标题】:What is the purpose of varB = self(varA) in a Python class? [closed]Python 类中 varB = self(varA) 的目的是什么? [关闭]
【发布时间】:2021-11-12 06:43:20
【问题描述】:

我正在调试 Python 代码并在其中一个类中看到此代码模式:


def someOtherFunction (x):
    return x**2

class baseX():
    pass

class baseY():
    pass


class newBase (baseX, baseY):

    def __init__ (self, **kwargs):
        super().__init__(**kwargs)
    
    def func (self, varX):
        varA = someOtherFunction(varA)
        varB = self(varA)
        return varB

我很难理解self() 语法。 varB = self(varA) 是什么?它在做什么?

原始代码不是我的代码。原始代码应该可以工作。我写的伪代码是为了更好地代表我的问题。请参阅the original code on Github(第 101 行)

【问题讨论】:

标签: python class self


【解决方案1】:
  • 首先,您需要提供MRE。比如定义类的时候,不要在类前使用def
  • 我尝试将您代码中的错误修复为 MRE
def someOtherFunction(x):
    return x+1

class baseX:
    pass

class baseY:
    pass

class newBase (baseX, baseY):

    def __init__ (self, someARGS):
        self.varA = someARGS

    def __call__(self,x):
        return x + 5

    def func (self, varX, varA):
        varX = someOtherFunction(varX)
        varB = self(varA)
        return varB

x = newBase(5)
print(x.func(0,10))

#result : 15
  • 在这段代码中,self(varA)表示将newBase作为可调用对象调用,普通类是不可调用的。

【讨论】:

  • 非常感谢。我想你刚刚成功了! __call__() 方法是我的问题。似乎在一个上层类中(请参阅 Github 以获取实际代码)有一个 __call__() 方法被传递给子类“newBase”。所以它现在可以被调用。再次感谢。
猜你喜欢
  • 2020-09-19
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2019-12-06
相关资源
最近更新 更多