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

猜你喜欢

转载自www.cnblogs.com/LZF-190903/p/11656008.html