zoukankan      html  css  js  c++  java
  • 组合,封装,访问限制机制,property装饰器

    组合

    1.什么叫组合:

    组合指一个对象中,包含另一个或多个对象。

    2为什么要用组合:

    减少代码的冗余

    耦合度:

    耦合度越高:程序的可扩展性越低

    耦合度越低:程序的可扩展性越高

    总结:

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

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

    封装

    1.什么是封装:

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

    PS:对象就好比一个容器,可以存放一堆属性方法。

    PS:存不是目的,目的是为了取,可以通过对象的方式获取属性或方法。

    2.为什么要封装:

    可以通过对象的方式,存放/获取属性或方法。

    对象拥有.的机制

    方便胡数据的存取

    访问限制机制

    1.什么是访问限制机制:

    凡是在类内部定义的属性或方法。

    凡是__开头的属性或方法名,都会被限制,外部不能“直接访问”该属性原型。

    PS:看着像该属性或方法隐藏起来了。

    注意:凡是在类内部定义__开头的属性或方法,都会变形为__类名__属性/方法
    2.为什么要有访问限制?
    将一些隐私的数据,隐藏起来,不让外部轻易获取
       接口:
      可以将一对数据封装成一个接口,可以让用户调用接口。
           并且通过相应的逻辑,最后再将数据返回给用户。
    class User:
       __name = 'tank'
       def __run(self):
           print('tank is runing...')

    # print(User.__name)(报错)
    obj = User()
    print(obj._User__name)

    class User:
       __name = 'tank'
       __age = 17
       __sex = 'male'
       __ID = '455454544545454545'
       __bal = 1555555
       def parse_user(self,username,password):
           if username == 'tank_iam' and password == '123':
               print(f'''
          通过验证,获取用户信息。
          用户名:{self.__name}
          用户年龄:{self.__age}
          用户性别:{self.__sex}
          用户ID:{self.__ID}
          用户存款:{self.__bal}
          ''')
           else:
               print('检验失败,无法查询')
       def __run(self):
           print('tank is runing...')
    obj = User()
    obj.parse_user('tank_iam','123')

    property装饰器:

    python内置装饰器,可以装饰在类内部的方法上。可以将该方法调用方式由--》对象方法()--》对象方法

    为什么用它:

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

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

    让名词的方法调用时更合理。

    目的为了迷惑调用者,调用的方法误以为是属性。

    class User:
       def __init__(self,name,weight,heighe):
           self.name = name
           self.height = heighe
           self.weight = weight
       @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 = '123'
    user_obj = User('hcy',75, 1.7)
    print(user_obj.bmi)
    print(user_obj.name)

     

     

  • 相关阅读:
    SQL注入(手工篇)
    sed命令
    交互输入与for语句
    编程原理
    grep与正则表达式
    重定向和管道符
    shell_oneday_历史命令相关
    python_01_初识python
    C# 上传文件
    C# in 参数化处理 (记)
  • 原文地址:https://www.cnblogs.com/cyfdtz/p/11984722.html
Copyright © 2011-2022 走看看