内容回顾

多态:

​ 一个类表现出的多种形态,实际上是通过继承来完成的

今日内容

  1. super,调用父类的同名方法

    按照mro顺序来寻找当前类的下一个类

  2. 封装

    • 广义上的封装

      • 方法属性名字前加了__,就变成了私有的,所有私有的内容或名字都不能在类的外部调用,只能在内部使用
    • 狭义上的封装

      • 封装的语法

        • 私有的静态变量
        • 私有的实例变量
        • 私有的绑定方法
    • 所有的私有化都是为了让用户不在外部调用类中的某个名字

    • 如果完成私有化 那么这个类的封装度就更高了 封装度越高各种属性的安全性就越高,但代码复杂

    • 加了双下划线为什么不能从类的外部调用了?

      • class User:
        __Country='China'
        __Role='法师'
        print(User._User__Country)#这样也能找到

        没有绝对的数据安全,定义的双下划线内容,其实存储时自动完成变形,变成了_类名__方法

    • 私有的内容能不能被子类使用呢?

    • 私有的原理:变形

  3. 在其它语言中的数据级别都有哪些?在python中有哪些?

    • public 公有的,类内类外都能用,父类子类都能用
    • protect 保护的,类内能用,父类子类都能用,类外不能用
    • private 私有的,类内能用,本类能用,其他地方都不行
  4. 类中的三个装饰器(内置函数)

    • property

      #property I
      #
      from math import pi
      class Circle:
      def __init__(self,r):
      self.r=r
      def area(self):
      return pi*self.r**2 c1=Circle(5)
      print(c1.r)
      print(c1.area()) ##
      from math import pi
      class Circle:
      def __init__(self,r):
      self.r=r
      @property #把一个方法伪装成属性,在调用这个方法时不需要加括号就能用,装饰的这个方法不能有参数
      def area(self):
      return pi*self.r**2 c1=Circle(5)
      print(c1.r)
      print(c1.area)
      #property的第二个应用场景:和私有属性合作
      class User:
      def __init__(self,usr,pwd):
      self.usr=usr
      self.__pwd=pwd
      @property
      def pwd(self):
      return self.__pwd 汤达人=User('汤达人','123')
      print(汤达人.pwd)
      • setter(了解)
      • delter(了解)
    • classmethod

    • staticmethod

  5. 反射

    • 概念:用字符串数据类型的名字,来操作这个名字对应的函数、实例变量、绑定方法...

    • name='henri'
      age=22
      n=input('>>>')
      if n=='name':
      print(name)
      elif n=='age':
      print(age)
      #这样变量多了很麻烦
      #有些时候明明知道一个变量的字符串数据类型的名字,但调不到,用反射
    • 反射对象的 实例变量

    • 反射类的 静态变量、绑定方法

    • 模块中的 所有变量

      • 被导入的模块
      • 当前执行的py文件--脚本
    • class Person:
      def __init__(self,name,age):
      self.name=name
      self.age=age henri=Person('henri',22)
      leo=Person('leo',23) ret=getattr(henri,'name')
      print(ret)
      ret=getattr(leo,'name')
      print(ret)
      #这就是反射

代码总行数2702+62=2764行

python26day的更多相关文章

随机推荐

  1. 【LeetCode】906. Super Palindromes 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS解法 相似题目 参考资料 日期 题目地址:ht ...

  2. uniapp中scroll-view自定义滚动条

    注意事项 需在app.vue中添加如下,需要important /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 16upx!imp ...

  3. 低成本CH7511芯片方案|CH7511电路设计参考|CS5211替代CH7511

    CH7511是主要用于设计eDP转LVDS转换器,怎么样设计一款低成本低BOM简单的DP转LVDS的转接设置,目前有一款可以替代兼容CH7511的方案电路,并且其设计电路整体BOM成本较低,并且设计简 ...

  4. win下如何优雅的使用 Burp Suite最新版

    众所周知国内我们使用的 Burp Suite 大多数是大佬们分享出来的专-业-破-jie-版的 Burp Suite,每次启动的时候都得通过加载器来启动 Burp Suite,那有没有更加优雅的方式呢 ...

  5. 《MySQL数据操作与查询》- 返校复习课练习题,创建数据库user_system,创建数据表user及user_ext

    一.其它(共18题,100分) 1.创建数据库user_system CREATE DATABASE user_system 2.在数据库user_system中创建数据表user及user_ext, ...

  6. 『无为则无心』Python函数 — 31、命名空间(namespace)

    目录 1.什么是命名空间 2.三种命名空间 3.命名空间查找顺序 4.命名空间的生命周期 5.如何获取当前的命名空间 1.什么是命名空间 命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名 ...

  7. centos6.5 搭建zabbix3.0

    一.搭建LAMP平台 注意zabbix3.0需要php5.4以上的版本 (1)安装依赖包 httpd和mysql安装过程省略 rpm -e httpd --nodeps yum -y install ...

  8. centos6.5-DNS搭建

    在RHEL6.5中,系统光盘自带了BIND服务的安装文件 安装步骤 准备工作: Service iptables stop    #关闭防火墙    Setenforce 0    关闭selinux ...

  9. 初识python:格式化输出

    使用input函数输入用户值,再使用三种方法格式化输出. #!/user/bin env python # author:Simple-Sir # 20180831 # 格式化输出: name = i ...

  10. selenium等待方式详解

    这些方式仅供参考,实际使用体验并不好,最好对find_element()方法进行二次封装. # coding=utf-8 from time import sleep from selenium im ...