扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
子类调用父类函数有以下方法:
目前成都创新互联已为上千家的企业提供了网站建设、域名、虚拟主机、绵阳服务器托管、企业网站设计、临沂网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
直接写类名调用
用 super(type, obj).method(arg)方法调用。
在类定义中调用本类的父类方法,可以直接用super().method(arg)
class A:
def method(self, arg):
pass
class B(A):
def method(self, arg):
# A.method(self,arg) # 1
# super(B, self).method(arg) # 2
super().method(arg) # 3
既然"Demo类当中又调用了Quitter",自然Quitter(self)中self是指Demo对象自身。
运行时会调用Quitter的构造方法def __init__(self, parent=None),此时注意刚刚传入的Demo对象会赋给parent变量(注意不是self变量,而是第二个变量parent,因为python class方法的第一个参数都是self,用于指代该类自身对象而非传入参数)
这种设计潜在含义是:Demo是父,Quitter是Demo的子。由父调用子,并把自身以参数形式传给子。
别人的是多态,也就是大家都从一个接口继承,然后子类对象可以当父类用,你这个父类都不知道谁继承了它,怎么调用子类方法?你这个思路不太对劲的。
在学习类的继承时,被“在子类中调用和修改父类的属性”卡住了。通过在网上查阅资料,大致搞明白了。主要有以下三点:
1. 子类的 __init__ 方法中通过“ 父类名.__init__(self) ”语句将父类的属性继承过来,见下面示例中标注“#例2”处。
2. 如果要在程序中调用子类时直接通过参数的形式修改父类继承过来的属性,那么子类的 __init__ 方法中需要在self后面跟上要赋值的参数,见下面示例中标注“#例1”处。
3. 即使是通过“ 父类名.__init__(self) ”语句继续过来的父类的属性,也需要在子类的 __init__ 方法中使用 self.变量名=变量值 的方式进行赋值,否则在子类中无法引用变量,见下面示例中标注“#例3”和“#例4”处。
执行结果:
从以上执行结果看,我们通过 y=b(4,5) 方式直接调用子类并给出参数“4,5”,而使用 y.myprint 调用了父类的方法,最后的计算结果是根据子类的参数计算得出的。说明我们在调用子类时直接修改了父类aa和bb的属性。
这是类的继承问题。先说一下,对于python来说定义函数要用def来定义,没有这个关键字无法定义函数。
然后通常,如果父类中有调用self.a,那么这个就是类的属性,也就是说,子类中自然存在。直接在子类中直接调用即可,如果在父类中只定义了一个局部变量,那么子类是获取不到的。不过可以定义类方法,直接调用类方法获取你想要的值。
方法1.
class A: def get_A(self): self.a=1 print(self.a)class B(A): def get_B(self):#self不是python关键字,建议类方法用self作为第一个参数 self.get_A()if __name__ == '__main__':b = B()b.get_B()
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流