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