内容回顾

多态:

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

今日内容

  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】129. Sum Root to Leaf Numbers 解题报告(Python)

    [LeetCode]129. Sum Root to Leaf Numbers 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/pr ...

  2. codeforces 624C Graph and String

    C. Graph and String time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. SOFA 数据透析

    数据透传: 在 RPC调用中,数据的传递,是通过接口方法参数来传递的,需要接口方定义好一些参数允许传递才可以,在一些场景下,我们希望,能够更通用的传递一些参数,比如一些标识性的信息.业务方可能希望,在 ...

  4. HITCON 2019 Lost Modular again writeup

    HITCON 2019 Lost Modular again writeup 算是基础题,有很多之前题的影子,做不出来纯属菜. 题目 加密脚本 from Crypto.Util.number impo ...

  5. 「算法笔记」旋转 Treap

    一.引入 随机数据中,BST 一次操作的期望复杂度为 \(\mathcal{O}(\log n)\). 然而,BST 很容易退化,例如在 BST 中一次插入一个有序序列,将会得到一条链,平均每次操作的 ...

  6. 利用 jQuery 操作页面元素的方法,实现电商网站购物车页面商品数量的增加和减少操作,要求单项价格和总价随着数量的改变而改变

    查看本章节 查看作业目录 需求说明: 利用 jQuery 操作页面元素的方法,实现电商网站购物车页面商品数量的增加和减少操作,要求单项价格和总价随着数量的改变而改变 当用户单击"+" ...

  7. 【MySQL作业】MySQL函数——美和易思数学函数和控制流函数应用习题

    点击打开所使用到的数据库>>> 1.添加一条商品记录.  商品编码  goodsCode 商品名 goodsName 种类 category 单价 unitPrice 02005 夏 ...

  8. Java_Swing中让窗口居中显示的方法(三种方法)

    方法一: int windowWidth = frame.getWidth(); // 获得窗口宽    int windowHeight = frame.getHeight(); // 获得窗口高 ...

  9. 每天学一点——python变量、常量与数字类型

    python变量.常量与数字类型 常量 (一句话能概括先讲它) 严格来讲,python中除了π与N就没有不变的量 所以,在python中我们识别常量是看它是否全大写(如下图) 变量 变量,顾名思义,就 ...

  10. IPv6地址格式

    1.说明 IPv6是互联网协议的第六版, 现有IPv4只支持大概40亿个网络地址, 而IPv6支持3.4e38个网络地址. IPv4的地址长度是32位(bit), IPv6的地址长度是128位. 尽管 ...