为什么在__init__中调用类函数时必须声明self?

时间:2017-08-08 04:50:45

标签: python

我正在阅读tutorial关于我在Python中使用GUI的第一步的tkinter时,我意识到在__init__函数中调用了一个类函数。

我想了解,在self.class_function()函数中调用类函数时,为什么必须声明__init__

我在下面的答案中找到了this的问题,只是说它必须被称为self.class_function而不是class_function,而没有提供任何关于为什么必须这样做的概念或解释这样:

class MyClass():
    def __init__(self, filename):
        self.filename = filename 

        self.stat1 = None
        self.stat2 = None
        self.stat3 = None
        self.stat4 = None
        self.stat5 = None
        self.parse_file()

    def parse_file(self):
        #do some parsing
        self.stat1 = result_from_parse1
        self.stat2 = result_from_parse2
        self.stat3 = result_from_parse3
        self.stat4 = result_from_parse4
        self.stat5 = result_from_parse5 

2 个答案:

答案 0 :(得分:3)

我的理解是,您必须使用self.method_name而不是method_name调用方法的原因是因为在引擎盖下,Python将self部分替换为方法的第一个参数。

您可以通过定义名为Foo的类来自行测试:

class Foo:
  def __init__(self):
    self.fun()
  def fun(self):
    print("fun")

您可以通过执行以下操作来实际调用fun()方法:

foo = Foo()
Foo.fun(foo)

这与在班级内执行self.fun()相同。

请注意,您无法静态访问私人字段(例如Foo._private_method(foo)。)

答案 1 :(得分:1)

  

__init__函数中调用类函数时必须声明self.class_function()的原因是什么?

self.foo()指的是类的实例方法,而不是静态方法或其他模块的其他方法......

以这种方式,你在其他语言中做了类似于this.foo()的事情,换句话说:self.foo()意味着调用该对象的foo方法!