Python 多态
一、多态
概念
允许将父对象设置成和一个或多个的他的子对象相等技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特征以不同的方式运作。简单来说:就是允许将子类型的指针赋值给父类类型指针
作用
接口重用
为了类在继承和派生的时候,保证使用"家谱"中任一类的实例的某一属性时的正确调用
Pyhon 很多语法都是支持多态的.比如 len(), sorted()。 你给len传字符串就返回字符串的长度。 传列表就返回列表长度
class Animal(object):
def __init__(self, name): # Constructor of the class
self.name = name
def talk(self): # Abstract method, defined by convention only
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
return "Neow!"
class Dog(Animal):
def talk(self):
return "Woof!...Woof!"
D = Dog("D1")
C = Cat("C1")
def Animal_talk(obj):# 一个接口.多种形态.
print(obj.talk())
Animal_talk(D)
Animal_talk(C)
总结:
面向对象三大特性及作用
1.封装 - 隐藏实现细节,使得代码模块化。
2.继承 - 扩展已存在的代码模块(类),它们的目的都是为了"代码重用"
3.多态 - 接口重用。类在继承和派生的时候,保证使用"家谱"中任一类的实例的某一属性时的正确调用
面向对象是一种编程方式,此编程方式的实现是基于对 "类" 和 "对象" 的使用.
类 是一个模板.模板中包装了多个"函数"供使用.
对象 根据模板创建的实例(即:对象).实例用于调用被包装在类中的函数.
面向对象三大特性:封装、继承和多态.
一:什么样的代码才是面向对象 ?
从简单来说:如果程序中的所有功能都是用 "类" 和 "对象" 来实现,那么就是面向对象编程了
二:函数式编程 和 面向对象 如何选择? 分别在什么情况下使用?
Python语言同时支持两种编程方式: 且函数式编程能完成的操作,面向对象都可以实现,而面向对象的能完成的操作,函数式编程不行(函数式编程无法实现面向对象的封装功能)。
所以:一般在Python开发中,全部使用面向对象 或 面向对象和函数式混合使用.
三:类和对象在内存中是如何保存 ?
类以及类中的方法在内存中只有一份.而根据类创建的每一个对象都在内存中需要存一份.大致如下图:
如上图所示:根据类创建对象时.对象中除了封装 name 和 age 的值之外.还会保存一个类对象指针.该值指向当前对象的类.
当通过 obj1 执行 【方法一】 时.过程如下:
根据当前对象中的 类对象指针 找到类中的方法
将对象 obj1 当作参数传给 方法的第一个参数 self
1 面向对象好处:2 更容易扩展、提高代码使用效率. 使你的代码组织性更强. 更清晰更适合复杂项目的开发3 封装:4 把功能的实现细节 封装起来. 只暴露调用接口5 继承:6 子承父业7 多态:8 接口继承9
10 定义:11 类 :相当于是模版12 对象:实例化的类13
14 属性:15 私有属性:__private16 公有属性:存在类的内存里. 所有实例共享17 成员属性:实例变量18 方法:19 类中函数20 构造函数:21 def __init__(self):22 析构函数:23 def __del__(self):24 新式类:25 object
26 super(Myclass,slef).__init__()27 多继承 继承路径28 =广度优先29 经典类:30 classDog:31 p_class.__init__(self,....)32 == 深度优先.
知识点回顾