zoukankan      html  css  js  c++  java
  • 类的封装、property、多态和多态性

    欢迎各位来到sky国际大舞台 ,我是你们的主持人狗剩

    马上嗨起来,你准备好了吗!!

    今日打气环节!

    今日洗脑金句:是时候梭哈精力了,赢了会所嫩模,输了下海干活!

    类的多态和多态性

    多态和多态性是不同的意义的。别乱搞混。

    一、多态

    就相当于是一个类,它有多种表现得形态,动物类,它有鸡狗猪牛羊和傻逼。这就是类的多态。

    1.1动物的多种形态

    # 动物有多种形态:人类、猪、狗
    class Animal:
        def run(self):  # 子类约定俗称的必须实现这个方法
            raise AttributeError('子类必须实现这个方法')
    
    
    class People(Animal):
        def run(self):
            print('人正在走')
    
    
    class Pig(Animal):
        def run(self):
            print('pig is walking')
    
    
    class Dog(Animal):
        def run(self):
            print('dog is running')
    
    
    peo1 = People()
    pig1 = Pig()
    d1 = Dog()
    
    peo1.run()
    pig1.run()
    d1.run()
    

    人正在走
    pig is walking
    dog is running

    二、多态性

    多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

    又是巴拉巴拉巴拉一堆看不懂,你可以理解为猪狗鸡羊傻逼都有叫这个功能

    猪叫嗷嗷 ,鸡叫咯咯 ,狗叫汪汪,羊叫咩咩 ,傻逼叫cnm

    2.1动物形态多态性的使用

    # 多态性:一种调用方式,不同的执行效果(多态性)
    def func(obj):
        obj.run()
    
    
    func(peo1)
    func(pig1)
    func(d1)
    

    人正在走
    pig is walking
    dog is running

    一个栗子就很足够了

    三、多态性的好处

    其实大家从上面多态性的例子可以看出,我们并没有增加新的知识,也就是说Python本身就是支持多态性的,这么做的好处是什么呢?

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

    类的property特性

    • property是一种装饰器,他被用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接使用

    什么是数据属性呢,你就把他理解为一个属性就好了,就是类里面被定义的变量。

    # ############### 定义 ###############
    class Foo:
        def func(self):
            pass
    
        # 定义property属性
        @property
        def prop(self):
            pass
    
    
    # ############### 调用 ###############
    foo_obj = Foo()
    foo_obj.func()  # 调用实例方法
    foo_obj.prop  # 调用property属性
    

    img

    img

    img

    这是需要掌握的,你会发现有方法的名字和定义的属性名一样,这是为了在外部调用的时候,可以让用户看上去就像是直接操作属性一样,其实不是,在你设置了装饰器之后,你直接调用,就相当于是调用这个方法,比如del name 他就是调用这个装饰了deleter的方法,方法的功能是删除这个属性,所以给我们好像是直接删除了的样子。

    组合

    什么是组合啊,很简单

    对象的某个属性是另一个类的对象就是组合

    class Foo:
        def __init__(self,bar):
            self.bar=bar
    
    class Bar:
        pass
    
    # f=Foo()
    bar=Bar()
    # f=Foo(Bar())
    f=Foo(bar)
    

    那么为什么要用组合呢,巴拉巴拉,用来减少代码冗余量,你想啊,看下面代码

    class Person:
        school = 'oldboy'
    
    class Teacher(Person):
        def __init__(self,name,age,level,course):
            self.name=name
            self.age=age
            self.level=level
            #course是课程对象,表示老师教授的课程
            self.course=course
    
    class Student(Person):
        def __init__(self,name,age,course):
            self.name=name
            self.age=age
            # course是课程对象,表示学生选的课程
            self.course = course
    
    class Course:
        def __init__(self,course_name,course_price,course_period):
            self.name=course_name
            self.price=course_price
            self.period=course_period
    
    course=Course('Python',20180,7)
    stu=Student('nick',19,course)
    teacher=Teacher('nick',19,'高级',course)
    

    本来你要在Teacher类和Student类里面全部写个完整的Course类对象, 而现在你先实例化了一个course出来,把它当做参数传了进去,就减少了很多重复代码了。

    今天和昨天的内容是重点,也是难点,需要好好掌握。

  • 相关阅读:
    nginx+tomcat实现动静分离
    redis主从配置+哨兵模式
    字符串去重
    MySql数据库笔试题总结
    ElasticSearch入门 第一篇:Windows下安装ElasticSearch
    Java NIO 读取文件、写入文件、读取写入混合
    Java NIO 与 IO之间的区别
    第2章 Python基础-字符编码&数据类型 综合 练习题
    第2章 Python基础-字符编码&数据类型 字典 练习题
    第2章 Python基础-字符编码&数据类型 列表&元祖 练习题
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11426801.html
Copyright © 2011-2022 走看看