python类的继承-1

 1 #!/usr/bin/python3
 2 
 3 #类定义
 4 class people:
 5     #定义基本属性
 6     name = ''
 7     age = 0
 8     #定义私有属性,私有属性在类外部无法直接进行访问
 9     __weight = 0
10     #定义构造方法
11     def __init__(self,n,a,w):
12         self.name = n
13         self.age = a
14         self.__weight = w
15     def speak(self):
16         print("%s 说: 我 %d 岁。" %(self.name,self.age))
17 
18 #单继承示例
19 class student(people):
20     grade = ''
21     def __init__(self,n,a,w,g):
22         #调用父类的构函,否则继承自people的student将没有n、a、w属性!!!!!!!!!!!!!!!
23         people.__init__(self,n,a,w)#
24         self.grade = g
25     #覆写父类的方法
26     def speak(self):
27         print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
28 
29 
30 
31 s = student('ken',10,60,3)
32 s.speak()

结果是:

若是上述代码没有第23行,代码如下:

 1 #!/usr/bin/python3
 2 
 3 #类定义
 4 class people:
 5     #定义基本属性
 6     name = ''
 7     age = 0
 8     #定义私有属性,私有属性在类外部无法直接进行访问
 9     __weight = 0
10     #定义构造方法
11     def __init__(self,n,a,w):
12         self.name = n
13         self.age = a
14         self.__weight = w
15     def speak(self):
16         print("%s 说: 我 %d 岁。" %(self.name,self.age)) #其实也可以用people.age访问类属性,但是此时实例化后调用此句时类属性age的值为0。
17 
18 #单继承示例
19 class student(people):
20     grade = ''
21     def __init__(self,n,a,w,g):
22         #调用父类的构函
23         #people.__init__(self,n,a,w)
24         self.grade = g
25     #覆写父类的方法
26     def speak(self):
27         print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
28 
29 
30 
31 s = student('ken',10,60,3)
32 s.speak()

结果为:

name为空,age为0,这不是直接继承的父类people的属性   name = ''    age = 0    么,也就是第31行 

s = student('ken',10,60,3)  name和age只是传递到了子类student中,子类由于继承了父类的属性和方法,但父类的初始化(构造函数)函数却没有被自动执行。









参考:
http://blog.csdn.net/goodluckac/article/details/53100957
http://www.runoob.com/python3/python3-class.html

原文地址:https://www.cnblogs.com/zhubinglong/p/6935295.html