在学习类的继承时,被“在子类中调用和修改父类的属性”卡住了。通过在网上查阅资料,大致搞明白了。主要有以下三点:
1. 子类的__init__
方法中通过“<父类名>.__init__(self)
”语句将父类的属性继承过来,见下面示例中标注“#例2”处。
2. 如果要在程序中调用子类时直接通过参数的形式修改父类继承过来的属性,那么子类的__init__
方法中需要在self后面跟上要赋值的参数,见下面示例中标注“#例1”处。
3. 即使是通过“<父类名>.__init__(self)
”语句继续过来的父类的属性,也需要在子类的__init__
方法中使用self.<变量名>=变量值
的方式进行赋值,否则在子类中无法引用变量,见下面示例中标注“#例3”和“#例4”处。
#-*-coding:utf-8-*-
class a:
'''
这是父类
'''
def __init__(self,aa=1,bb=1):
self.aa=aa
self.bb=bb
def myprint(self):
print self.aa,self.bb
class b(a):
'''
这是子类
'''
def __init__(self,aa,bb): #例1
a.__init__(self) #例2
self.aa=aa #例3
self.bb=bb #例4
def myprint2(self):
print self.aa,self.bb
def myprint3(self):
a.myprint()
y=b(4,5) #调用子类,并给出参数
y.myprint() #此处调用的是父类的方法,而给出参数是由子类给出的
执行结果:
4 5
从以上执行结果看,我们通过y=b(4,5)
方式直接调用子类并给出参数“4,5”,而使用y.myprint
调用了父类的方法,最后的计算结果是根据子类的参数计算得出的。说明我们在调用子类时直接修改了父类aa和bb的属性。
网友评论