组合访问多态抽象property鸭子

组合

什么是组合

组合就是一个类的对象具备某种属性,该属性指向另一个类的对象

为什么要用组合

  • 组合是用来解决类与类之间代码的冗余的问题

使用

class People:
    def __init__(self,name):
        self.name=name

    def info(self):
        print(f'{self.name}')


class City:
    def __init__(self,city):
        self.city=city

    def info(self,who):
        print(f'{who.name}在{self.city}')

        
no1=People('JJ')
city=City('shanghai')
no1.where=city
no1.where.info(no1)

封装

什么是封装

比喻:

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

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

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

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

为什么要封装

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

如何封装

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

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

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

通过对象.属性=属性

访问机制

什么是访问机制

在类内部定义,凡是以__开头的属性属性与方法,都会被python内部隐藏起来,让外部不能之间访问类内部的__开头属性。

比如:__name=’jj‘

访问机制的目的

将一堆隐私的属性与不能被外部轻易访问的属性,隐藏起来,不被外部之间调用

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

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

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

若想直接访问,调用变形后的名字即可

class Foo:
    _name='jj'  # --->_类名__属性名

property

什么是property

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

为什么要用property

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

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

如何使用

@property

多态

什么是多态

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

多态的目的

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

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

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

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

多态的最终目的

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

通过继承实现

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

抽象类

是什么

bac模块:全名abstract_class

使用的目的

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

如何使用

import abc

鸭子类型

什么是鸭子类型

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

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

继承:

耦合性太高,程序扩展性查

鸭子类型:

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

posted @ 2019-10-11 16:31  鸿鸿1  阅读(161)  评论(0编辑  收藏  举报