文章目录
- 前言
- 一、多继承
- 二、多重继承
- 三、多态
- 总结
前言
记录多继承,多态的含义,理清思路。
一、多继承
含义:一个子类可以继承多个父类。
class 子类(父类1, 父类2.....):
pass
一般这种情况,父类之间是没有什么关联,独立的,实现不同功能。
可以了解的知识:
涉及:新式类和旧式类。 有兴趣可以了解
菱形继承问题。
二、多重继承
gggrand - grand - parent - son
三、多态
其实在Python中是没有多态的,多态这个概念是Java中的。
# 判断一个对象,是否为某一个类的对象。
isinstance(对象名, 类名))
# 子类的对象,也是父类的对象。
鸭子类型:
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。
多态:父类类型,接收子类对象。(类型:指数据类型;接收:是参数接收实际的值,也就是赋值的意思)
多态这种用法,也就是在继承中才有。
java:定义函数的任何参数,必须指明类型。在java当中一定是在继承的情况下会用。
python可以说是没有动态,也可以说是处处皆多态。
举例:
class Base:def __init__(self, kind, name):self.kind = kind # 属性赋值self.name = name # 属性赋值def eat(self, food):print("{} 要吃 {}!!!".format(self.name, food))def drink(self):print("要喝水了!!!")class Dog(Base):def __init__(self, kind,name,color, age=1):super().__init__(kind,name)self.color = color # 属性赋值self.age = age # 属性赋值self.sex = None # 当属性的初始值不确定的时候,可以设置为Nonedef eat(self, food):print("狗吃",food)def bark(self):print("狗嗷嗷的叫!!!")print("注意警惕!!")class Cat(Base):def __init__(self, kind,name,color, age=1):super().__init__(kind,name)self.color = color # 属性赋值self.age = age # 属性赋值self.sex = None # 当属性的初始值不确定的时候,可以设置为Nonedef bark(self):print("狗嗷嗷的叫!!!")print("注意警惕!!")class People:def eat(self, food):print("人吃", food)def __init__(self):pass# 小小菲的狗 - 泰迪、棕色、summer、一岁、母的
xxf_dog = Dog("泰迪", "summer", "棕色", 2)
xxf_cat = Cat("英短", "小白", "黑白色", 3)
# 判断一个对象,是否为某一个类的对象。
# 子类的对象,也是父类的对象。
# print(isinstance(xxf_dog, Dog))
# print(isinstance(xxf_dog, Base))# 参数形参名类型:类名。申明/希望你传进来的是这个类的对象。
def hello(object_name):print(object_name)# 调用object_name的eat方法。# python当中只要传进来的参数,有eat这个方法。就可以了。res = object_name.eat("美食")print(res)# hello(xxf_dog)
# hello(xxf_cat)
hello(People())
转载:
python什么是鸭子类型_python鸭子类型_杰森斯坦森1150的博客-CSDN博客
总结
暂无