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

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(),程序就会正常运行,我的问题是,在创建一个新实例时,必须要用self调用类的方法吗?还是我设计有误?感谢您的帮助。

是的,在 Python 中你需要明确指定 self。你的两个方法周围是否有一个“class”? - Gregor
1个回答

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的容器,而my_method无法通过任何其他途径访问它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接