• 【Python学习之旅】---封装与反射(类的相关知识,面向对象三大特性:继承-多态-封装)


    #第一层封装:定义类
    #第二层封装:区分内外,有些属性只能内部使用,外部不能


    class Name:

    __a='你是猪' #封装变量a
    def __init__(self,name):
    self.name=name

    def get_name(self):
    print('我叫%s' %self.name)


    n1=Name('陈宇霞')
    print(Name.__dict__) #查看类属性字典
    print(n1._Name__a) #可以通过此种方式调用__a ,没有真正的封装

    #真正的封装:区分内外,给用户提供一个访问的接口函数进行调用,内部的实现逻辑,外部无法知晓
    class Room:
    def __init__(self,name,leng,width):
    self.name=name
    self.__leng=leng
    self.__width=width
    def get(self): #接口函数,让外部者调用隐藏的属性
    return self.__leng * self.__width

    r1=Room('厕所',100,50)
    print(r1.get()) #外部通过调用get函数实现


    #执行结果:

    {'__module__': '__main__', '_Name__a': '你是猪', '__init__': <function Name.__init__ at 0x00000232CEB08EA0>, 'get_name': <function Name.get_name at 0x00000232CEB08E18>, '__dict__': <attribute '__dict__' of 'Name' objects>, '__weakref__': <attribute '__weakref__' of 'Name' objects>, '__doc__': None}
    你是猪
    5000

    #程序具有检测自己的功能
    class Room:
    def __init__(self,name,leng,width):
    self.name=name
    self.__leng=leng
    self.__width=width
    def get(self): #接口函数,让外部者调用隐藏的属性
    return self.__leng * self.__width

    r1=Room('厕所',100,50)

    print(hasattr(r1,'name')) #检测实例r1是否有name这个属性
    print(getattr(r1,'name')) #获取这个实例属性的值
    setattr(r1,'name','卧室') #修改实例属性的值
    print(r1.name)
    delattr(r1,'name') #删除实例属性的值
    print(r1.__dict__)

    #使用hasattr的好处
    class FTP:
    def __init__(self,addr):
    print("开始连接服务器%s" %addr)
    self.addr=addr

    f1=FTP('1.1.1.1')
    if hasattr(FTP,'get'): #判断FTP是否有get函数
    a=getattr(FTP,'get') #有的话则获取函数地址
    a() #运行函数
    else:
    print("执行其他逻辑")


    #执行结果:

      True
      厕所
      卧室
     { '_Room__leng': 100, '_Room__width': 50}
     开始连接服务器1.1.1.1
     执行其他逻辑























  • 相关阅读:
    PCB CE工具取Genesis JOB与STEP内存地址 方法分享
    PCB 720全景图嵌入登入界面应用实现
    PCB 录屏工具Screen2Exe GifCam ScreenToGif
    Centos部署hexo
    npm俩种换源方式
    腾讯云Centos下安装FastDFS
    远程连接docker容器里的MySQL出现2058
    CentOS7.6安装docker
    数据结构与算法(3)---链表
    java实现自定义图
  • 原文地址:https://www.cnblogs.com/chenyuxia/p/12147069.html
Copyright © 2020-2023  润新知