zoukankan      html  css  js  c++  java
  • Python 学习day21

    python day21

    组合

    什么是组合

    组合指的是一个对象中的属性,是另一个对象

    为什么要使用组合

    组合目的和继承一样,为了减少代码冗余

    # 组合的实现:
    class People:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
    class Teacher(People):
        def __init__(self, name, age, sex):
            super().__init__(name, age, sex)
    
    class Student(People):
        def __init__(self, name, age, sex):
            super().__init__(name, age, sex)
    
    class Date:
        def __init__(self, year, month, day):
            self.year = year
            self.month = month
            self.day = day
    
        def tell_birth(self):
            print(f'{self.year}年{self.month}月{self.day}日')
    
    tea1 = Teacher('momo', 24, 'female')
    date_obj = Date(2018, 8, 17)
    tea1.date = date_obj
    tea1.date.tell_birth()
    

    组合小结

    继承:

    ​ 类与类的关系,一种什么是什么的关系,子类与父类是从属关系

    组合:

    ​ 对象和对象的关系,一种什么有什么的关系,一个对象拥有另一个对象

    封装

    什么是封装

    ​ 封装指的是一堆属性(特征与技能)封装到一个对象中

    ​ 存数据的目的是为了取,对象可以.的方式获取属性

    为什么要封装

    封装的目的为了方便存取,可以通过对象.属性的方式获取属性

    如何封装

    ​ 特征 : 变量 ---> 数据属性

    ​ 技能 : 函数 ---> 方法属性

    在类内部,定义一堆属性(特征与技能)

    通过 对象. 属性 = 属性值

    访问限制机制

    什么是访问限制机制

    在类内部定义,凡是以__开头的数据属性与方法属性都会被python内部隐藏以来,让外部不能"直接"访问内部的__开头的属性

    访问限制机制的目的

    隐私的属性与不能被外部轻易访问的属性,可以隐藏起来,不被外部直接调用

    优点:

    ​ 对重要数据获取的逻辑更加严谨,进而保证了数据的安全

    接口 : 隐私属性可以通过封装一个接口,在接口内做业务逻辑的处理,再把数据返回给调用者

    attention : 在python中,不会强制限制属性的访问,类内部__开头的属性,只是做了一种变形,若想直接访问,调用变形后的名字即可

    __name = 'momo' #---> _类名__属性名

    class ATM:
        def __flow(self):
            print('打印账单')
            
        def withdraw(self):
            self.__flow()
            print('访问限制!!')
            
    atm = ATM()
    atm.withdraw()
    

    property

    什么是proprety

    python内置的装饰器,主要是给类内部的方法使用

    为什么要用property

    使用它的目的,是将类内部的方法(def 方法名())变成了(def 方法)

    在对象调用某个方法是,将对象.方法()变成对象.方法(看起来像一个普通的数据属性)

    如何使用property

    class People:
        def __init__(self,name,weight,height):
            self.name = name 
            self.weight = weight
            self.height = height
            
        @property
        def bmi(self):
            return self.height/(self.weight ** 2)
        
        @property
        def get_name(self):
            return self.name
    
        # 改
        @get_name.setter
        def set_name(self, val):
            self.name = val
    
        # 删除
        @get_name.deleter
        def del_name(self):
            del self.name
        
    p = People('momo',95,1.6)
    print(p.bmi)
    
    # 注意: 不能对被装饰过的方法属性修改.
    

    多态

    什么是多态

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

    多态的目的

    多态也称之为多态性,在程序中继承就是多态的表现形式

    多态的目的是为了让多种不同类型的对象,在使用相同功能的情况下,依然调用同一个名字

    父类 : 定义一套统一的标准

    子类 : 遵循父类统一的标准

    多态的最终目的 : 统一子类编写的规范,为了让使用者更方便调用相同功能的方法

    class Animal:
        def speak(self):
            pass
    
    class Cat(Animal):
        def speak(self):
        	print('喵喵喵~~~~')
        
    class Dog(Animal):
        def speak(self):
        	print('汪汪汪~~~~')
        
    class Pig(Animal):
        def speak(self):
        	print('哼哼哼~~~~')
        
    cat = Cat()
    dog = Dog()
    pig =pig()
    cat.speak()
    dog.speak()
    pig.speak()
    

    抽象类

    什么是抽象类

    abc模块 abstract_class

    使用目的

    强制子类必须遵循父类的统一标准

    import abc
    
    class Animal(metaclass=abc.ABCMeta):
    
        @abc.abstractmethod
        def eat(self):
            pass
    
        @abc.abstractmethod
        def drink(self):
            pass
    
        @abc.abstractmethod
        def speak(self):
            pass
    
    class Pig(Animal):
    
        def eat(self):
            print('猪在吃饭')
            pass
    
        def drink(self):
            pass
        
        def speak(self):
            print('哼哼哼~~~')
    
        def run(self):
            pass
    
    pig = Pig()
    
  • 相关阅读:
    什么是先进先出淘汰算法,试举出一种实现方法?
    什么是置换算法,在页式系统中常用的置换算法是什么?
    什么是系统的抖动,它有什么危害?
    如果主存中的某页正在与外部设备交换信息,缺页中断时可以将这一页淘汰吗?为了实现正确的页面调度,应如何扩充页表的功能?
    什么是虚拟存储器,在页式系统中如何实现虚拟存储?
    分区分配方法的主要缺点是什么,如何克服这一缺点?
    什么是最坏适应算法?该算法的特点是什么?
    什么是最佳适应算法,该算法的特点是什么?
    JAVA8 之初识函数式编程与函数式接口(一)
    使用 Netty 实现一个 MVC 框架
  • 原文地址:https://www.cnblogs.com/samoo/p/11656062.html
Copyright © 2011-2022 走看看