Python中类内部函数的第一个参数都是self,这个参数指向调用此函数的类实例。
类内部函数定义时不可以省略self,但是外部函数不需要此函数,理解了self的定义就能理解这一点。
试验中遇到的错误:
在类中的函数定义为:
def _end_testcase_prompt(testcase,result):
在类实例中的函数调用为:
super()._end_testcase_prompt(testcase,diff_result)
执行时报错:
ERROR:main:_end_testcase_prompt() takes 2 positional arguments but 3 were given
这里有两个注意点:
1.在子类中调用父类的函数,可以用super().+函数名的方式,此时可以省略self
2.当类实例调用函数时,在执行的时候会默认加上self,比如上面的函数调用在执行时实际执行结果应该是
父类名称._end_testcase_prompt(子类实例名称,testcase,diff_result)
此处子类中调用父类函数的四种方式:
1.直接写类名调用: parent_class.parent_attribute(self)
2.用 super(type, obj).method(arg)方法调用:super(child_class, child_object).parent_attribute(arg) 【不需要写self】
3.在类定义中调用本类的父类方法,可以直接 super().parent_method(arg)
4.直接用self.parent_method(arg) 【子类在集成父类时,会继承父类的函数】