你好,我有这个代码
class Test(object):
def start_conn(self):
pass
def __init__(self):
self.conn = start_conn()
但是这段代码会出错:
NameError: 全局名称“start_conn”未定义
如果我写 self.conn = self.start_conn()
程序运行没有错误,我的问题是,当我创建一个新实例?还是我这边的设计错误?
非常感谢
最佳答案
总之,这是必须的。您必须引用存储方法的容器。大多数情况下,这意味着引用 self
。
其工作方式如下。当你定义一个(新式)类时
class FooClass(object):
def my_method(self, arg):
print self.my_method, arg
您创建一个type
对象,其中包含处于未绑定(bind) 状态的方法。然后,您可以通过类名引用该未绑定(bind)方法(即通过 FooClass.my_method
);但是要使用该方法,您必须通过 self
参数显式传递一个 FooClass
对象(如 FooClass.my_method(fooclass_instance, arg)
).
然后,当您实例化您的类 (f = FooClass()
) 时,FooClass
的方法将绑定(bind)到特定实例 f
.然后,每个方法中的 self
都引用该实例 (f
);这是自动的,因此您不再需要显式地将 f
传递到方法中。但是你仍然可以做 FooClass.my_method(f, arg)
;这相当于 f.my_method(arg)
。
但是请注意,在两种情况下,self
是类的其他方法传递给my_method
的容器,它无法通过任何其他途径访问它们。
关于python - 如何在构造函数类内部调用内部函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249609/