zoukankan      html  css  js  c++  java
  • 面向对象(三) 组合 封装

    组合

    什么是组合:

    组合指的是一个对象中,包含一个或多个对象

    为什么使用组合:

    减少代码冗余,降低耦合度

    如何使用组合:

    继承:继承是类与类的关系,子类继承父类的属性/方法,子类与父类是一种从属关系。

    组合:组合是对象与对象的关系,一个对象拥有另一个对象中的属性/方法,是一种什么有什么的关系

    演示:

    #人类
    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}
            ''')
    stu = Student('redwei',21,'male')
    date_obj = Date(1998,4,7)
    stu.date_obj = date_obj
    
    stu.date_obj.tell_birth()
    

    封装

    什么是封装

    封:比如将一个小袋子,封起来

    装:比如将一堆小猫小狗和tank装在袋子里

    封装指的是可以将一堆属性和方法,封装到到对象中

    ps:对象就好比一个‘袋子/容器’,可以存放一堆属性和方法。

    ps:存不是目的,取才是目的,可以通过‘对象.’的方式获取属性或方法

    为什么使用封装

    可以通过‘对象.’的方式‘存放/获取’属性或方法

    可以拥有‘.’的机制

    方便存取数据

    怎么用封装
    class User:
        x = 10 
        def func():
            pass
        obj = User()
        obj.y = 20
        obj---> x,func,y
    

    访问限制机制

    什么是访问限制机制:

    凡是在类内部定义的属性或方法,以–开头的属性或方法名,都会被限制,外部不能直接访问该属性的原型。

    python特有:凡是在类内部定义–开头的属性或方法,都会变形为–类名–属性/方法。

    为什么要有访问限制:

    将一些隐私的数据,隐藏起来,不让外部轻易获取。

    可以将一堆数据封装成一个接口,可以让用户调用接口。

    并且通过相应的逻辑,最后将数据返回给用户

    如何实现:
    class ATM:
        def __insert_card(self):
            print('插卡')
            pass
        def __input_pwd():
            print('输入密码')
            pass
        def __input_bal(self):
            print('输入取款金额')
            pass
        def __withdraw_cost(self):
            print('取款')
            pass
        def __print_flow(self):
            print('打印回执单')
            pass
        def withdraw(self):
            self.__insert_card()
            
            self.__input_pwd()
            
            self.__input_bal()
            
            self.__with_cost()
            
            self.__print_flow()
    
    atm_obj = ATM()
    #直接调用不能拿到数据
    #必须通过其他接口
    atm_obj.withdraw
    

    property

    什么是property

    property是一个内置的装饰器,可以装饰在类’内部的方法’上.

    可以将该方法调用方法由–>对象.方法()–>对象.方法

    为什么使用property

    在某些场景下,调用的方法只是用来获取计算后的的某个值.

    必须通过 对象.方法() 方式调用,让方法看起来像动词

    让名词的方法,调用时更为合理,目的是为了,迷惑调用者,调用的方法误以为是属性

    如何用
    class User:
        def __init__(self,name,weight,height):
            self.__name = name
            self.weight = weight
            self.height = height
            
        @property
        def bmi(self):
            return self.weight/(self.height**2)
        @property
        def name(self):
            return self.__name
        @name.setter
        def name(self,value):
            self.__name = value
        @name.deleter
        def name(self):
            del self.__name
            
    user_obj = User('redwei',100,1.65)
    print(user_obj.bmi)
    
    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    kerberos认证原理---讲的非常细致,易懂(转发)
    CDH安装之篇四:启用Kerberos认证(转发)
    RabbitMQ和Kafka(转发)(待续)
    Kafka的Log存储解析(转发)(待续)
    滴滴passport设计之道:帐号体系高可用的7条经验(含PPT)(转发)(待续)
    淘宝的消息中间件(2013) (转发)(待续)
    设计消息中间件时我关心什么?(解密电商数据一致性与完整性实现,含PPT)(转发)
    一种提高微服务架构的稳定性与数据一致性的方法(转发)
    大型网站架构系列:消息队列(转发)
    Kafka实战解惑(转发)
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863905.html
Copyright © 2011-2022 走看看