继承
和Java不同,Python中可以多继承,就是一个子类可以继承多个父类,一个父类也可以有多个子类。
子类可以调用父类的公有方法,属性。
例如,下面这个是父类:
1 # -------------------------继承------------------------------------------- 2 class People(): 3 def __init__(self,name,gender,age): 4 self.name = name 5 self.gender = gender #如果要设置为私有属性可以这样:self.__gender = gender 6 self.age = age 7 8 def attri(self): 9 food = input('输入你要吃的东西:') 10 sleep_time = input('你要睡多久?') 11 play_item = input('你要play?') 12 self.Eat(food) 13 self.Sleep(sleep_time) 14 self.Play(play_item) 15 def Eat(self,food): 16 self.food = food 17 # food = input('输入你要吃的东西:') 18 return food 19 def Sleep(self,sleep_time): 20 self.sleep_time = sleep_time 21 # sleep_time = input('你要睡多久?') 22 return sleep_time 23 def Play(self,play_item): 24 self.play_item = play_item 25 # play_item = input('你要play?') 26 return play_item 27 def submit(self): 28 # food = self.Eat() 29 # sleep = self.Sleep() 30 # play_item = self.Play() 31 print(self.name, '吃', self.food) 32 print(self.name, '要睡', self.sleep_time) 33 print(self.name, 'play',self.play_item)
这个也是父类:
1 class Son(): 2 def __init__(self,father): 3 self.father = father 4 print('父亲是:', self.father)
这个是子类,它继承了前面两个父类:
1 class Student(People,Son): #子类继承父类,多继承,父类可以有多个子类,子类也可以多个父类,Java不能多继承,一个子类只能一个父类 2 def __init__(self,name,gender,age,id,father): 3 super(Student, self).__init__(name,gender,age) #重写构造方法又继承父类构造方法 4 # People.__init__(self,self.name,self.gender,self.age) 5 Son.__init__(self,father) #继承指定父类构造方法 6 self.id = id 7 def study(self): 8 print(self.name,'在学习') 9 def Play(self, play_item): #这种子类与父类同名的方法的现象被称为方法重写,也被称为方法覆盖,可以说子类重写了父类的方法,也可以说子类覆盖了父类的方法 10 print('学生只允许玩扫雷!!!') 11 self.play_item = play_item 12 # play_item = input('你要play?') 13 return play_item
子类重写了父类的构造方法,重写构造方法一般用第二种经典方法,这种方法可以指定重写的父类,如果继承了多个父类的话。
子类中命名和父类相同的方法,就是对父类方法的重写,如果子类对象调用,只会调用重写后的方法。
下面是创建子类对象的方法:
1 def identify(): 2 idfy = input('输入你的身份:') 3 if idfy == 'Student': 4 info = input('输入people信息:') 5 name = info.split(' ')[0] 6 gender = info.split(' ')[1] 7 age = info.split(' ')[2] 8 id = info.split(' ')[3] 9 father = info.split(' ')[4] 10 s1 = Student(name,gender,age,id,father) 11 s1.attri() 12 s1.study() 13 print('_'*30) 14 print(s1.name, s1.age, s1.gender,s1.id,s1.father) 15 s1.submit()
注意如果py文件中除了类、方法、变量的声明外,还有方法或者对象的创建,在其他py文件(也叫模块)调用时,会把文件的所有内容都执行一遍,如果不想执行这些方法或者对象的创建,要在这些语句前加:
1 if __name__ == '__main__': #当在其他页面import这个页面时,确保不会执行以下内容 2
表示以下内容只有在运行本页面时才会执行。