面向对象_多态

作者: 青蛙兄 分类: 进阶 发布时间: 2019-06-29 23:52

#多态是面向对象的三大特征之一
#多态从字面上理解:多种形态
#一个对象可以以不同的形态去呈现
#定义2个类,一个是A一个是B

class A:  
    def __init__(self,name):  
        self._name =name  
    @property  
    def name(self):  
        return self._name  
    @name.setter  
    def name(self,name):  
        self._name = name  
  
class B:  
    def __init__(self,name):  
        self._name =name  
    @property  
    def name(self):  
        return self._name  
    @name.setter  
    def name(self,name):  
        self._name = name  
a = A('孙悟空')  
b = B('猪八戒')  

#定义一个函数
#对于say_hell0()函数来说,只要对象中含有name属性,它就可以作为参数传递
#这个函数并不会考虑对象的类型,只要有name属性即可

def say_hell0(obj):  
    print('你好',obj.name)  
say_hell0(a) #你好 孙悟空

#在say_hello_2中我们做了一个类型检查,也就是只有obj是A类型的对象时,才可以正常使用
#其他类型的对象都无法使用该函数,这个函数就违反了多态
#违反了多态的函数,只适用于一种类型的对象,无法处理其他类型的对象,这样导致函数的适用性非常的差

def say_hello_2(obj):  
    #类型检查  
    if isinstance(obj,A):  
        print('你好',obj.name) 

#鸭子类型
#如果一个东西,走路像鸭子,叫声像鸭子,那么它就是鸭子
#len()
#之所以一个对象能通过len()来获取长度,是因为对象中具有一个特殊方法__len__
#换句话说,只要对象中含有__len__特殊方法,就可以通过len()来获取它的长度
##总结:面向对象三大特征
##封装
## -确保对象中的数据安全
##继承
## -保证了对象的可扩展性
##多态
## -保证了程序的灵活性

发表评论

电子邮件地址不会被公开。