【问题标题】:How to call internal functions inside the constructor class?如何在构造函数类中调用内部函数?
【发布时间】:2012-02-12 14:38:42
【问题描述】:

你好,我有这个代码

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。您的两种方法是否有“类”?

标签: python class self


【解决方案1】:

简而言之,这是必须的。您必须参考存储方法的容器。大多数情况下,这意味着引用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,它无法通过任何方式访问它们其他途径。

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    相关资源
    最近更新 更多