文章目录
前言
记录多继承,多态的含义,理清思路。
一、多继承
含义:一个子类可以继承多个父类。
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 # 当属性的初始值不确定的时候,可以设置为None
def 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 # 当属性的初始值不确定的时候,可以设置为None
def 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博客
总结
暂无