zoukankan      html  css  js  c++  java
  • day 21 小结

    组合

    什么是组合

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

    为什么要使用组合

    减少代码冗余

    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 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('tank',14,'male')
    date_obj = Date(2005,1,1)
    # date_obj.tell_birth()
    # 将date对象赋值到tea1对象的date属性中
    tea1.date = date_obj
    

    总结:

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

    ​ 组合: 对象与对象的关系,一种什么有什么的关系,一个对象拥有另一个对象

    封装

    什么是封装

    比喻:

    ​ 封: 比如把一个袋子封起来

    ​ 装: 比如把一堆小猫小狗装到袋子里

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

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

    ​ 比喻: 对象就好比一个袋子,袋子里面装一堆属性

    为什么要封装

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

    如何封装

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

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

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

    通过 对象.属性 = 属性值

    访问限制机制

    什么是访问限制机制

    在类内部定义,凡事以__开头的数据属性与方法属性,都会被隐藏起来

    外部不能直接访问类内部的属性

    比如: __name = ‘tank’

    访问限制机制的目的

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

    好处:

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

    接口 : 隐私属性可以通过封装一个接口,在接口内做业务逻辑的处理,再

    把数据返回给调用者

    注意 : 在python中,不会强制限制属性的访问,类内部__开头的属性,只是做了一次变形

    若想直接访问,调用变形

    class Foo:
        __name = 'tank'  # --> __类名__属性名
        
        
    # 例如:ATM
    class ATM:
        # 1.插卡
        def __insert_card(self):
            print('插卡')
            pass
    
        # 2.输入密码
        def __input_pwd(self):
            print('密码验证')
            pass
    
        # 3.输入取款金额
        def __input_money(self):
            print('输入金额')
            pass
    
        # 4.开始吐钱
        def __get_money(self):
            print('执行吐钱')
            pass
    
        # 5.打印账单
        def __print_flow(self):
            print('打印账单')
            pass
    
        # 取钱直接接口
        def withdraw(self):
            self.__insert_card()
            self.__input_pwd()
            self.__input_money()
            self.__get_money()
            self.__print_flow()
            print('取款程序执行完毕!')
    
    
    atm = ATM()
    atm.withdraw()
    
    

    property

    什么是property

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

    为什么要用property

    使用它的目的,是将类内部的方法

    如何使用property

    @property

    class People:
        def __init__(self,name,weight,height):
            self.name = name
            self.weight = weight
            self.height = height
            
    	@property
        def bmi(self):
            return self.weight/(self.height*self.height)
        
        # 了解
        @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('jason', 200, 1.6)
    

    注意: 不能对被装饰过的方法属性修改

    了解: 若真要改通过此方法修改属性,可以用另一种方式修改

    print(p.get_name)
    p.set_name = 'tank'
    print(p.get_name)
    # p.del_name()
    # print(p.get_name)
    del p.del_name
    print(p.get_name)
    

    多态

    什么是多态

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

    多态的目的

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

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

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

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

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

    如何实现

    ​ 继承

    注意: 在python中,不会强制要求子类必须遵守父类的一套标准,所以出现了抽象类

    抽象类

    ​ 是什么

    ​ abc模块 abstract_class

    使用的目的

    强制子类必须遵守父类的一套标准

    如何使用

    import abc

    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()
    
    

    鸭子类型

    什么是鸭子类型

    在不知道对象是何物的情况下,但是你长得像鸭子,那么你就是鸭子类型

    鸭子在python中不推荐使用抽象类强制限制子类的定义,但是子类都遵循鸭子类型

    # 猪
    class Pig:
        # 吃
        def eat(self):
            print('猪在吃饭')
            pass
        # 喝
        def drink(self):
            pass
        def speak(self):
            print('哼哼哼~~~')
    
    # 猫
    class Cat:
        # 吃
        def eat(self):
            print('猫在吃饭')
            pass
        # 喝
        def drink(self):
            pass
        def speak(self):
            print('喵喵喵~~')
    
    # 狗
    class Dog:
        # 吃
        def eat(self):
            print('狗在吃饭')
            pass
        # 喝
        def drink(self):
            pass
        def speak(self):
            print('汪汪汪~~~')
    
    

    ​ 继承:

    ​ 耦合性高,扩展性差

    ​ 鸭子类型:

    ​ 耦合度低,程序的可扩展性强

    多态炫技操作

    # 猪
    class Pig:
        # 吃
        def eat(self):
            print('猪在吃饭')
            pass
        # 喝
        def drink(self):
            pass
        def speak(self):
            print('哼哼哼~~~')
    
    # 猫
    class Cat:
        # 吃
        def eat(self):
            print('猫在吃饭')
            pass
        # 喝
        def drink(self):
            pass
        def speak(self):
            print('喵喵喵~~')
    
    # 狗
    class Dog:
        # 吃
        def eat(self):
            print('狗在吃饭')
            pass
        # 喝
        def drink(self):
            pass
        def speak(self):
            print('汪汪汪~~~')
    
    dog = Dog()
    cat = Cat()
    pig = Pig()
    
    def BARK(animal):
        animal.speak()
    
    BARK(dog)
    BARK(cat)
    BARK(pig)
    
    
    str1 = '1234'
    list1 = [1, 2, 3]
    
    print(str1.__len__())
    print(list1.__len__())
    
    def LEN(d):
        return d.__len__()
    
    print(LEN(str1))
    print(LEN(list1))
    
    print(len(str1))
    print(len(list1))
    
  • 相关阅读:
    getResources().getXml()获取xml
    android中处理XML的方式
    财务管理
    关于Android界面编程与视图(View)组件
    韩正:上海千万不能出方向性失误
    scaletype
    有钱花
    static readonly const
    关于android:focusable属性
    Android中focusable属性的妙用——底层按钮的实现
  • 原文地址:https://www.cnblogs.com/LZF-190903/p/11656008.html
Copyright © 2011-2022 走看看