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()
原文地址:https://www.cnblogs.com/samoo/p/11656062.html