多态

'''
class Student:
    def __init__(self,age):
        self.__age = age

    @property
    def age1(self):
        return self.__age

    @age1.setter
    def age1(self,age):
        self.__age = age

s = Student(10)
s.age = 11
print(s.age)

'''
'''
继承:
has a 
class Student:
    def __init__(self,name,book):
        pass

is a

涉及到父类和子类
class Preson:
    def __init__(self,name,book)
    self.name = name
    self.age = age
    
    def run(self):
    print('正在跑步')
    
class Student(Preson):
    def __init__ (self,score);
    self.score = score
    super(Student,self).__init 继承父类中的属性
    
    def run(self):
    print('{}正在走'.format(self.name))
    super().run() 调用父类中的方法
    
    复习的时候:
    1.__init__ 父类有子类没有 父类没有 子类有  父类子类都有
    2.重写的方法,要父类的方法的情况
    3.多继承 一个类可以继承多个父类(广度优先 python3)
    obj.__mro__
    
    
    
    多态 封装 继承------》面对对象编程
'''

'''
多态
'''


class Preson:
    def __init__(self, name):
        self.name = name

    def feed_pet(self, pet):   # 此时的pet可以接收一切对象,但是要经过判断
        if isinstance(pet, Pet):
            print('{}喜欢养{}'.format(self.name, pet.nickname))
        else:
            print('不是宠物')


class Pet:
    role = 'Pet'

    def __init__(self, nickname, age):
        self.nickname = nickname
        self.age = age

    def show(self):
        print('{}的年龄是{}'.format(self.nickname, self.age))


class Cat(Pet):
    role = '猫'

    def catch_mouse(self):
        print('抓老鼠。。。')


class Dog(Pet):
    role = '狗'

    def watch_house(self):
        print('看家......')


class Tiger:
    def eat(self):
        print('老虎能吃人')


# 创建对象
cat = Cat('luck', 18)
dog = Dog('大黄', 4)
preson = Preson('家伟')
tiger = Tiger()
preson.feed_pet(tiger)


 Python中多态是指一类事物有多种形态。比如动物有多种形态,人,狗,猫,等等。 
 Python的多态性是指:在不考虑实例类型的情况下使用实例,也就是说不同类型的实例有 相同的调用方法。比如人,猫,狗,等等只要是继承了animal就可以直接调用它的talk()方法。 
 peo=People() dog=Dog() pig=Pig() #peo、dog、pig都是动物,只要是动物肯定有talk方法 #于是我们可以不用考虑它们三者的具体是什么类型,而直接使用 peo.talk() dog.talk() pig.talk() #更进一步,我们可以定义一个统一的接口来使用 def func(obj):     obj.talk()


 
好处:
 1.增加了程序的灵活性   以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal) 2.增加了程序额可扩展性   通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用 





回顾:
面对对象的特点:
封装,继承,多态

封装:
私有化属性,定义公有的set和get方法:
class Student;
    def __init__(self,age):
        self.__age = age

     @property
     def xx(self):
        return self.__age

     @xx.setter
     def xx(self);
        self.__age = xx
这边注意,子类继承父类的时候,父类里面的私有属性(__init__)不会被继承

继承:
has a
is a  父类子类中的调用

多态:
同一个类但是有多种形态的表现

posted @ 2020-02-14 12:33  smartcat994  阅读(136)  评论(0编辑  收藏  举报