从Python

时间:2018-02-16 18:15:43

标签: python function class self

如何在Python中调用类中定义的函数?

       import pypyodbc as pyodbc

        Master_Conn = 'Driver={SQL Server};Server=server\23;Database=DBname;UID=username;PWD=password;'
        Master_db = pyodbc.connect(Master_Conn)
        Master_Cursor = Master_db.cursor()

        class Test:

            def __init__(self):
                self.master_status = ""


            def Getmodel(self):

                self.master_status= dict(Master_Cursor.execute("select col1,col2 from tablename ").fetchall())
                print (self.master_status)
Test.Getmodel()

使用上面的代码,我得到了

  

TypeError :Getmodel()缺少1个必需的位置参数:' self'

所以我尝试了Test.Getmodel(self),结果是

  

NameError :名称​​' self' 未定义。

我甚至尝试了使用if __name__== '__main__':的两种情况,但也遇到了同样的错误。

2 个答案:

答案 0 :(得分:2)

您将Getmodel定义为实例方法。因此必须在类Test的实例上调用它。

要创建类Test的实例,您可以编写

instance_of_test = Test()

现在,您可以在Getmodel

上致电instance_of_test
instance_of_test.Getmodel()

您可以通过编写

来缩短此过程
Test().Getmodel()

请注意,self(通常)在调用实例方法时会被隐藏地传递;它表示调用方法的实例。

考虑以下课程Pizza

class Pizza:

    def __init__(self, size):
        self.size = size

    def get_size(self):
        return self.size

首先,您需要创建Pizza

的实例
mypizza = Pizza(42)

然后您可以在get_size

上调用实例方法mypizza
mypizza.get_size()

答案 1 :(得分:1)

如果首先实例化类Test的对象,那么您的工作将会起作用。实例化只是意味着你调用类就好像它是一个方法。以下应该有效:

Test().Getmodel()

()是实例化发生的原因所以现在self基本上被传递给Getmodel()方法,因为现在存在类Test的对象。