Python 基础入门 6_2 类的继承与多态

"""
类的继承:将类(父类)继承给另外一个类(子类),这样子类有了父类的属性与方法(私有属性/方法除外),
同时也有自己的属性与方法,这种叫做继承,一个子类可以继承多个父类,一个父类也有可以有多个子类
继承的作用:简化了代码,减少冗余;提高了代码的健壮性;提高了代码的安全性;是多态的前提
缺点:耦合性高

创建一个子类,跟创建一个类没有什么区别,格式如下
class 类名([父类列表]) #一个类可以继承很多父类
属性 #若该类和父类的属性名相同,以子类的为主
方法 #若该类和父类的方法名相同,以子类的为主

当一个子类实例化对象时,会默认将父类列表中的第一个父类无参实例化(哪怕这个父类没有无参构造函数),
可以用super(子类名,self)的形式来表示这个父类的对象,但这个仅仅只能表示第一个父类的对象,多个父类可以直接父类名当作父类的对象
子类.属性名/方法名调用:先去子类找属性名/方法名,没有则到第一个父类找属性名/方法名,直到最后一个父类的属性名/方法名都没有时,报错
"""
class Father():
age,var,var1= 44,"F变量","变量1"
__money = "200w"

def eat(self):
print("father eat")
def __work(self):
print("work")
def fun2(self):
print("father fun")
class Mether():
age,var,var2= 40,"M变量","变量2"
__money = "150w"

def eat(self):
print("Mether eat")
def __work(self):
print("Mether work")
def fun1(self):
print("Mether fun")

class Son1(Father,Mether):
age = 19
def knowFatherAge(self):
print("Son1 konw father's age is ", super(Son1, self).age)

class Son2(Mether,Father):
age = 17
def knowFatherAge(self):
print("Son2 konw father's age is ", Father.age)

son1,son2= Son1(),Son2()
print("son1.age:%d ,son2.age:%d" %(son1.age,son2.age))
print("son1.var:%s , son2.var:%s" %(son1.var,son2.var))
# print("son1.money:%d , son2.money:%d" %(son1.money,son2.money)) #报错,因为子类没有对应的属性,而父类对应的属性是私有的
# print("son1.var3:%d , son2.var3:%d" %(son1.var3,son2.var3)) #报错,因为子类和父类都没有对应的属性

son1.knowFatherAge(),son2.knowFatherAge()
son1.eat(),son2.eat()
# son1.work(),son2.work() #报错,因为子类没有对应的方法,而父类对应的方法是私有的
# son1.fun3(),son2.fun3() #报错,因为子类和父类都没有对应的方法

"""
多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
(发送消息就是函数调用)

多态存在的三个必要条件:
1.要有继承
2.方法要有重写
3.要定义一个调用重写方法的方法

多态的作用:一种调用方式,不同的执行效果(多态性)
增加了程序的灵活性
增加了程序额可扩展性
"""
class A():
var1 = 1
def fun(self):
print("A")
def fun1(self,obj): #必要条件3
obj.fun()

class B(A): #必要条件1
def fun(self): #必要条件2
print("B")

class C(A): #必要条件1
def fun(self): #必要条件2
print("C")

a,b,c = A(),B(),C()
a.fun1(a),a.fun1(b),a.fun1(c)
原文地址:https://www.cnblogs.com/hjlin/p/10629758.html