#继承时重写扩充父类的方法
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def prin(self):
print('%s的年龄是%s'%(self.name,self.age))
"""
重写父类的方法有两种,
一种是覆盖,另一种就是对父类方法进行扩展(用到super()关键字)
覆盖:顾明思意,很简单就是直接在之类里把这个方法在写一遍,
在调用该名方法时它就会默认使用之类里的那个
扩展:就是原本父类的方法不丢,在额外扩展一些子类特殊需求的,
利用super类的实例化对象super().加上父类的方法
"""
class Student(Person):
def __init__(self,name,age,score):
super().__init__(name,age)#这里用的就是扩展
self.score=score
def prinn(self):
self.prin()
print('分数是%s'%self.score)
str=Student("小红",13,99)
str.prinn()
#多继承的相关知识
class A:
def __init__(self):
print("类A")
def fa(self):
print("a的方法")
class B:
def __init__(self):
print("类B")
def fa2(self):#应该尽量避免与另一个父类里有相同的名
print("b的方法")
class C(A,B):
def __init__(self):#要是不写这个方法的话会怎么样?
#会只执行输出“类A”,因为__init__会默认构造并执行,而C的两个父类都有__init__方法
#所以,出现类里有重名的方法,所以它会默认只执行第一个继承类的方法
A.__init__(self)
B.__init__(self)
def test(self):
print("c")
c=C()
print(C.__mro__)#如果有重名它会按照什么顺序去执行方法
#c.fa() 出现同名时候,它会默认使用括号里的第一个类
#c.test()
"""
Python在多继承时,如果这些父类中有相同的方法名,
若在子类中使用时没有指定父类名,
则Python系统将从左往右按顺序搜索。
Python支持多继承,多继承的一般形式为:
class 子类名(父类名1,父类名2, ...., 父类n):
子类的类体语句
"""