继承
父类无法继承子类
子类可以继承父类的所有
class A():# 父类
def function(self):
self.name = "小明"
print(self.name)
class B(A):# 子类继承(父类)
def function(self):
# super()函数是继承当前父类function()方法可以添加新的变量,但是不能对父类方法内的变量做修改
super().function()
class C(A):# 子类继承(父类)
def function(self):
# 对父类的function进行修改,此时无法通过super函数修改,只能通过重写方式进行修改
self.name = "小红"# 重写父类name
print(self.name)
b = B() # B子类实例化
b.function() #输出继承后的name(小明)
c = C() # C子类实例化
c.function()# 输出方法重写后的name(小红)
多继承
多继承时,如果父类中出现相同参数,python会遵守就近原则进行输出
实例如下:
class A:# A类
def __init__(self):
self.name = '小红' # 与B类中name存在同名
self.age = 20 # 与B类中age存在同名
class B:# B类
def __init__(self):
self.name = '小明' # 与A类中name存在同名
self.age = 18 # 与A类中age存在同名
def sexs(self):
self.sex = '男' # 不存在同名
# C类所继承的父类中的方法,如果存在同名(如:B和A内name与age存在同名),B类会覆盖A类的相同参数,B类优先级高于A类。
class C(B,A):# C继承B、A类。(B类在A类前方,因此出现同变量时,优先获取B类变量)
def func(self):
print(self.name)# 输出:小明
print(self.age)# 输出:18
print("我的名字叫%s,我的年龄%s,性别%s" % (self.name, self.age,self.sex))
s = C()
s.func()# 输出:我的名字叫小明,我的年龄18,性别男
多态
一、什么是多态:
1、多态一定是发生在子类和父类之间,并且子类重写了父类的方法
2、多态是不同的子类对象调用相同的父类,输出不同的结果
3、多态更为灵活,能够扩展,体现开闭原则
二、多态的定义:父类的同一种动作或行为
三、多态的步骤:
1:调用父类
2:重写子类
3:创建子类
实例1:
class A():# 父类
def funcs(self):
print("小明")
class B(A):# B继承A
def funcs(self):# B类重写A类中的funcs方法
print("小红")
class C(A):# B继承A
def funcs(self):# C类重写A类中的funcs方法
print("小蓝")
class D():
def functions(self, run):# functions方法内传入run(run是自定义的参数)
run.funcs() # run调用类的funcs方法
# D类进行实例化
d = D()
b = C()
# d实例化调用functions方法,run参数是对应类的实例,就会调用对应的funcs方法
d.functions(A())# 输出:小明
d.functions(b)# 输出:小红
d.functions(C())# 输出:小蓝
实例2:
isinstance函数,判断一个对象是否是已知类型,并且会考虑到继承关系。
为什么不用type,因为type不会考虑到继承关系。
class A():# 父类
def funcs(self):
print("小明")
class B(A):# B继承A
def funcs(self):# B类重写A类中的funcs方法
print("小红")
class C(A):# B继承A
def funcs(self):# C类重写A类中的funcs方法
print("小蓝")
class D():
def functions(self, run):# functions方法内传入run(run是自定义的参数)
run.funcs() # run调用类的funcs方法
# D类进行实例化
d = D()
b = B()
c = C()
# d实例化调用functions方法,run参数是对应类的实例,就会调用对应的funcs方法
d.functions(A())# 输出:小明
d.functions(B())# 输出:小红
d.functions(c)# 输出:小蓝
d.functions(C())# 输出:小蓝