zoukankan      html  css  js  c++  java
  • Python3 从零单排19_组合&多态

      组合 :对象1的属性是对象2,对象1就拥有了对象2的数据和函数属性,这就是组合。
    # A类型和B类型没有共性,不可以继承,但是A有B的特性,比如A是人,B是家,A和B没有继承关系,但是人有家,A有B的关系,那么就可以把B的属性都给A用
    class people:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def say_hi(self):
            print("hi my name is %s"%self.name)
    
    
    class home:
        def __init__(self,adress,area,height):
            self.adress = adress
            self.area = area
            self.heaight = height
    
        def home_info(self):
            print("地址:%s,面积:%s"%(self.adress,self.area))
    
    
    xg = people("晓钢",18)
    hourse = home("地球",1000,10)
    xg.hourse = hourse
    xg.hourse.home_info()  #地址:地球,面积:1000

      抽象类:抽取一些类的共性作为一个类,比如水果类,人类。抽象类能被继承,但是不能被实例化。
      当函数属性用装饰器abc.abstractmethod装饰的时候,子类必须按照抽象类的定义实现这个固定的函数属性,否则报错。
    import abc #需要用到abc这个模块来定义抽象类
    
    
    class animal(metaclass=abc.ABCMeta):
        @abc.abstractmethod  #abc.abstractmethod 装饰后,该类的所有子类必须含有该方法才不会报错
        def run(self):
            print("people is running!")
    
        def sleep(self):
            pass
    
    class people(animal):
        def run(self):  #必须定义run方法才可以,否则报错
            pass

      

    多态:同一类事物的多种形态
    import abc
    
    
    class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
        @abc.abstractmethod  
        def talk(self): # animal的所有子类都必须实现talk方法,否则报错
            pass
    
    class People(Animal): #动物的形态之一:人
        def talk(self):
            print('say hello')
    
    class Dog(Animal): #动物的形态之二:狗
        def talk(self):
            print('say wangwang')
    
    class Pig(Animal): #动物的形态之三:猪
        def talk(self):
            print('say aoao')
    
    class Cat(Animal): #动物的形态之三:猫
        def talk(self):
            print('say miamiao')
    
    #多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象方法  从而扩展性高
    peo1=People()
    dog1=Dog()
    pig1=Pig()
    cat1=Cat()
    
    # peo1.talk()
    # dog1.talk()
    # pig1.talk()
    
    def func(animal):
        animal.talk()
        
    func(peo1)
    func(pig1)
    func(dog1)
    func(cat1)
    鸭子类型  不同类定义的函数或者数据属性名字相同,不同对象在调用这些属性时,看上去都是一样的属性,实现功能也一样,但内部代码逻辑并不一样。
    class Disk:
        def read(self):
            print('disk read')
    
        def write(self):
            print('disk write')
    
    
    class Text:
        def read(self):
            print('text read')
    
        def write(self):
            print('text write')
    
    # f=open(...)
    # f.read()
    # f.write()
    
    disk=Disk()
    text=Text()
    
    disk.read()
    disk.write()
    
    text.read()
    text.write()

      

    序列类型是典型的鸭子类型:列表list,元祖tuple,字符串str
    l=list([1,2,3])
    t=tuple(('a','b'))
    s=str('hello')
    #
    # # print(l.__len__())
    # # print(t.__len__())
    # # print(s.__len__())
    #
    # # def len(obj):
    # #     return obj.__len__()
    
    print(len(l))
    print(len(t))
    print(len(s))
     
     
     
     
     
     
  • 相关阅读:
    Leetcode 16.25 LRU缓存 哈希表与双向链表的组合
    Leetcode437 路径总和 III 双递归与前缀和
    leetcode 0404 二叉树检查平衡性 DFS
    Leetcode 1219 黄金矿工 暴力回溯
    Leetcode1218 最长定差子序列 哈希表优化DP
    Leetcode 91 解码方法
    Leetcode 129 求根到叶子节点数字之和 DFS优化
    Leetcode 125 验证回文串 双指针
    Docker安装Mysql记录
    vmware虚拟机---Liunx配置静态IP
  • 原文地址:https://www.cnblogs.com/znyyy/p/10144577.html
Copyright © 2011-2022 走看看