如何在构造函数类中调用内部函数?
问题描述:
你好,我有这样的代码如何在构造函数类中调用内部函数?
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
。
其工作方式如下。当你定义一个(新式)类
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
的容器,它没有通过任何其他途径对它们的访问。
是的,你需要明确地指定python中的self。你的两种方法有没有“类”? – Gregor 2012-02-12 14:44:08