2012-02-12 119 views
3

你好,我有这样的代码如何在构造函数类中调用内部函数?

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()程序工作无差错,我的问题是,是必须与调用当我创建一个新的实例时,自我的类的方法?或是从我身边的设计错误?

非常感谢

+0

是的,你需要明确地指定python中的self。你的两种方法有没有“类”? – Gregor 2012-02-12 14:44:08

回答

4

总之,这是必须的。您必须参考存储方法的容器。大多数情况下,这意味着指的是self

其工作方式如下。当你定义一个(新式)类

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

创建type对象,其中包含在其绑定状态的方法。然后,您可以通过班级名称(即通过FooClass.my_method)参考该未绑定方法;但要使用该方法,必须通过参数self明确传递FooClass对象(如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的容器,它没有通过任何其他途径对它们的访问。

相关问题