让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。
为肥乡等地区用户提供了全套网页设计制作服务,及肥乡网站建设行业解决方案。主营业务为网站建设、成都网站制作、肥乡网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
Python中多态的特点
1、只关心对象的实例方法是否同名,不关心对象所属的类型;
2、对象所属的类之间,继承关系可有可无;
3、多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;
4、多态是调用方法的技巧,不会影响到类的内部设计。
特征:私有属性与私有方法不能从外部被调用,也不能被子类继承
唯一写法:在属性或方法前面加上__(两个下划线)
我们写一个简单的例子,创建一个类,包含私有方法、私有属性、普通方法、普通属性,并生成一个实例
私有属性和私有方法可以从内部被调用(总不能我写了,但是哪都不让用吧)
我们试试在类里再加入一个新的方法,调用私有方法和属性
可以看到,私有属性和私有方法是可以在类内部被调用的。
举个私有属性应用场景的例子
二。object类
我们试一下
三。多继承
一个子类可以继承多个父类,用逗号隔开
多个父类中有同名方法时,按照继承顺序进行调用
四。多态
当不同的实例,有同名的方法时,我们可以一个函数,传入不同的实例,执行对应的方法。
我们定义一个猫和一个狗的类,两个类中都有'叫'的方法。并各生成一个实例。
定义一个函数,用函数来调用'叫'的方法
这就叫多态。
接口(python 中的协议)的多种不同的实现方式即为多态。多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
可以看到,在上面的代码中,只要实现了 Dock 类中的 swimming 和 Walk 方法,那么这个类就可以被叫做 Dock 类
应用场景 如: for 循环, 在python 中 for 循环只能用于可迭代对象, 那么, 我自己定义的类实现了 __iter__协议(接口),这个实例类就是一个可迭代对象,可以被for 循环使用
python 中定义协议类协议使用 @abstractmethod 装饰器,@abstractmethod 装饰过的类是不能进行初始化的,相对于c++中的纯虚函数类
这个类只能当做协议(接口)类
我们就times函数为例谈谈多态,就像我们看到的那样,times函数中表达式×*y的意义完全取决于x和y的对象类型,同样的函数,在一个实例下执行的是乘法,在另一个实例下执行的却是重复。Python把对某一对象在某种语法下的合理性交给那个对象自身来判断。实际上,*作为一个分派机制,将执行的控制权移交给被处理的对象。
这种依赖类型的行为称为多态,其含义就是一个操作的意义取决于被操作对象的类型。因为Python是动态类型语言,所以多态在Python中随处可见。事实上,在 Python中所有操作都是多态的操作:print、index、*运算符,以及更多。这实际上是有意而为的,并且从很大程度上算作是这门语言简洁性和灵活性的一个表现。例如,函数可以自动地应用到所有类别的对象上。只要对象支持所预期的接口(也称为协议),函数就能处理它们。也就是说,如果传给函数的对象支持预期的方法和表达式运算符,那么它们对函数的逻辑来说就是有着即插即用的兼容性。即使是简单的times 函数,对任意两个支持*的对象都可以执行,无论它是哪种类型,也不管它是何时编写的。这个函数对于数字来说是有效的(执行乘法),或者一个字符串和一个数字(执行重复),或者任意其他支持扩展接口的兼容对象——甚至是我们尚未编写过的基于类的对象。