我正在阅读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
答案 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方法!