如何在构造函数类中调用内部函数?

时间:2012-02-12 14:38:43

标签: python class self

你好我有这个代码

class Test(object):
    def start_conn(self):
        pass

    def __init__(self):
        self.conn = start_conn()

但是这段代码出现了这个错误:

NameError: global name 'start_conn' is not defined

如果我写self.conn = self.start_conn()程序正常运行,我的问题是,当我创建一个新实例时,是否必须使用self调用类的方法?或者是我身边的设计错误?

非常感谢

1 个答案:

答案 0 :(得分:4)

简而言之,这是必须的。您必须引用存储方法的容器。大多数情况下,这意味着引用self

其工作方式如下。定义(新式)类

class FooClass(object):
    def my_method(self, arg):
        print self.my_method, arg

您创建一个type对象,其中包含未绑定状态的方法。然后,您可以通过类的名称引用该未绑定的方法(即通过FooClass.my_method);但要使用该方法,您必须通过FooClass参数显式传递self对象(如FooClass.my_method(fooclass_instance, arg)中所示)。

然后,当您实例化类(f = FooClass())时,FooClass的方法将绑定到特定实例f。然后,每个方法中的self引用该实例(f);这是自动的,因此您不必再明确地将f传递给方法。但你仍然可以做FooClass.my_method(f, arg);这相当于f.my_method(arg)

但请注意,在两个的情况下,self是将类的其他方法传递给my_method的容器,{{1}}无法访问他们通过任何其他途径。