多态

多态

1、什么是多态

  多态指的就是同一种事物多种形态

2、为什么要用多态

  用基类创建一套统一的规则,强制子类去遵循(使用抽象类实现),这样便可以在不用考虑

对象具体类型的前提下而直接使用对象下的方法

3、如何用多态

class animal:
    def eat(self):
        pass
    def drink(self):
        pass
    def run(self):
        pass
    def bark(self):
        pass
     
class dog(animal):
    def speak(self):
        print('汪汪汪')
class cat(animal):
    def jiao(self):
        print('喵喵喵')
class pig(animal):
    def han(self):
        print('哼哼哼‘)
多态性:可以在不用考虑对象具体类型的前提下而直接使用对象下的方法
 c.eat()
 d.eat()
 p.eat()

 c.drink()
 d.drink()
 p.drink()

#
 d.bark()
 p.bark()
 c.bark()

 d.speak()
 c.jiao()
 p.han()

我们发现我们在调用的时候与父类中属性不同,所以导致不能用到父类中属性。

所以,我们要固定调用方法

import abc #abstract class
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def eat(self):
        pass

    @abc.abstractmethod
    def drink(self):
        pass

    @abc.abstractmethod
    def run(self):
        pass

    @abc.abstractmethod
    def bark(self):
        pass

# obj=Animal() # 抽象基类本身不能被实例化

class Cat(Animal):
    def eat(self):
        print('cat eat')

    def drink(self):
        print('cat drink')

    def run(self):
        print('cat run')

    def bark(self):
        print('喵喵喵')

class Dog(Animal):
    def eat(self):
        print('dog eat')

    def drink(self):
        print('dog drink')

    def run(self):
        print('dog run')

    def bark(self):
        print('汪汪汪')

class Pig(Animal):
    def eat(self):
        print('pig eat')

    def drink(self):
        print('pig drink')

    def run(self):
        print('pig run')

    def bark(self):
        print('哼哼哼')

c=Cat()
d=Dog()
p=Pig()


# c.bark()
# d.bark()
# p.bark()


# def BARK(animal):
#     animal.bark()
#
#
# BARK(c)
# BARK(d)
# BARK(p)



s='hello'
l=[1,2,3]
t=(4,5,6)

s.__len__()
l.__len__()
t.__len__()


# def LEN(obj):
#     return obj.__len__()
#
# print(LEN(s))
# print(LEN(l))
# print(LEN(t))
print(len(l))
print(len(s))
print(len(t))

鸭子类型(了解一下)

class Foo:
    def f1(self):
        print('from foo.f1')

    def f2(self):
        print('from foo.f2')

class Bar:
    def f1(self):
        print('from bar.f1')

    def f2(self):
        print('from bar.f2')


obj1=Foo()
obj2=Bar()


obj1.f1()
obj1.f2()

obj2.f1()
obj2.f2()




class Disk:
    def read(self):
        print('disk read')

    def write(self):
        print('disk write')


class Txt:
    def read(self):
        print('txt read')

    def write(self):
        print('txt write')


class Process:
    def read(self):
        print('process read')

    def write(self):
        print('process write')


obj1=Disk()
obj2=Txt()
obj3=Process()


obj1.read()
obj2.read()
obj3.read()

猜你喜欢

转载自www.cnblogs.com/wuchenyu/p/8856084.html