【问题标题】:Call python method with self parameter使用self参数调用python方法
【发布时间】:2023-03-07 06:58:05
【问题描述】:

各位,我是 Python 新手,现在我正在学习 py 面向对象。所以,在我的情况下,我有一个类 Founds 具有一个属性(稍后会增加),并且我正在按照正确的标准建模。 但是当我从另一个类(Main)调用这个方法时,它会抛出:

TypeError: val() missing 1 required positional argument: 'fundos' 

我调用的主类,实例化这个方法。我更喜欢使用对象,因为系统会在几天内变得复杂。我的主要:

class Main(FlaskForm):   

    series = None 
    fundos = fundos()

    @app.route('/resultado', methods=['GET','POST'])
    def resultado():
        titulo = "Retorno da pesquisa"
       
        valuation = request.form.getlist("fundo_select")
        nomefundo = request.form.get("fii")
        fundoss = any
        fundoss = nomefundo.split(',')  
            
        **series = fundos.val(fundoss)**            

我的创始班:

class Fundos(object):  
    # Atribuindo na classe como Nada
    lista_fiis=None;

    # Array de atributos da classe, inicializando
    def __init__(self):
        # Inicializando como array
        self.lista_fiis=[]


    # Pega fundos selecionados
    # Gera o relatório no excel
    def val(self, fundos):
        info_fii={}

【问题讨论】:

    标签: python html flask web


    【解决方案1】:

    在 Python 中,与在 Java 或 C++ 中可以隐含 this.this-> 不同,在访问成员属性时不能删除 self.。因此,当你使用fundos.val(fundoss)时,你并不是在使用类上定义的fundos = fundos()变量,而是使用类本身。

    关于 Python 中的 OOP 和方法,您应该了解的另一件事是,您可以访问类中定义的任何方法,就好像它是静态方法一样;您只需要自己提供实例即可。换句话说,给定以下类:

    class MyClass:
        hello(self):
            print('Hello!')
    
    myInstance = MyClass()
    

    调用myInstance.hello() 与调用MyClass.hello(myInstance) 相同。

    因此,您在调用中所做的实际上是直接从类中调用该方法,将其提供fundoss 作为self 参数,而不提供第二个参数。

    您需要做的是使用self.fundos.val(fundoss) 来使用您为Main 而不是类fundos 创建的实例。

    P.S.:一般来说,最好远离名称阴影,不要为您的类和实例使用相同的名称,这样会更容易发现这些问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2013-09-11
      • 2012-09-04
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多