做网站版权所有怎么写公共体育课程网站建设
做网站版权所有怎么写,公共体育课程网站建设,网站建设教程 金旭亮,杭州网络推广运营公司前言
python中进行面向对象编程#xff0c;当在子类的实例中调用父类的属性时#xff0c;由于子类的__init__方法重写了父类的__init__方法#xff0c;如果在子类中这些属性未经过初始化#xff0c;使用时就会出错。
例如以下的代码:
class A(object):
def __init__(self):…前言
python中进行面向对象编程当在子类的实例中调用父类的属性时由于子类的__init__方法重写了父类的__init__方法如果在子类中这些属性未经过初始化使用时就会出错。
例如以下的代码:
class A(object):
def __init__(self):
self.a 5
def function_a(self):
print(I am from A, my value is %d % self.a)
class B(A):
def __init__(self):
self.b 10
def function_b(self):
print(I am from B, my value is %d % self.b)
self.function_a() # 调用类A的方法出错
if __name__ __main__:
b B()
b.function_b()
执行结果如下这时候就需要在类B的__init__方法中先执行类A的__init__方法脚本才可以正确执行。Python提供了两种方法来完成这个任务。
方法一 调用未绑定的父类__init__方法
在类的方法定义时首个参数均为self。当实例化这个类时self就被自动绑定到当前的实例。绑定也就意味着这个实例的属性方法都可以通过‘self.***的方式进行调用。但是如果通过类名直接调用类的方法self参数就不会被自动绑定到实例上可以绑定到我们指定的实例上。也就是子类的实例上在这里就是类B了。
所以这里所说的未绑定的父类__init__方法 就是指未绑定父类实例的父类__init__方法。
具体的代码如下
class A(object):
def __init__(self):
self.a 5
def function_a(self):
print(I am from A, my value is %d % self.a)
class B(A):
def __init__(self):
A.__init__(self) # 此处修改了。如果类A的__init__方法需要传参也需要传入对应的参数
self.b 10
def function_b(self):
print(I am from B, my value is %d % self.b)
self.function_a()
if __name__ __main__:
b B()
b.function_b()
执行结果如下方法二调用super函数
super函数是用于调用父类的一个方法主要是用于解决多继承问题避免多继承带来的一些问题当然也可以用来解决单继承问题调用父类的__init__方法了。
具体代码如下
class A(object):
def __init__(self):
self.a 5
def function_a(self):
print(I am from A, my value is %d % self.a)
class B(A):
def __init__(self):
super(B, self).__init__() # 此处修改了
self.b 10
def function_b(self):
print(I am from B, my value is %d % self.b)
self.function_a()
if __name__ __main__:
b B()
b.function_b()
执行结果如下总结
两种方法各有优缺点但都可以解决问题。
- 方法一简单直观但面对多继承问题只能多次调用每个父类的__init__方法
- 方法二不太直观但可以解决多继承问题会一次性的执行所有的父类的对应方法
所以实际使用时按照自己的需要选择一个就行了。
以上这篇Python实现子类调用父类的初始化实例就是小编分享给大家的全部内容了希望能给大家一个参考也希望大家多多支持脚本之家。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85324.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!