内容回顾

  • 命名空间
  • 组合
    • 一个类的对象是另一个类对象的属性
    • 两个类之间有 什么有什么二点关系:例:班级有学生
    • 学生和课程、圆形和圆环、班级和课程
  • 计算器
  1. from functools import reduce
  2. #格式整理
  3. def exp_fmt(exp):
  4. while re.search('[+-]{2,}',exp):
  5. exp.replace('--','+')
  6. exp.replace('+-','-')
  7. exp.replace('-+','-')
  8. exp.replace('++','+')
  9. return exp
  10. #计算两个数的乘法或除法
  11. def mul_div(exp):
  12. #'3*4','5/6'
  13. if '*' in exp:
  14. a,b=exp.split('*')
  15. return float(a) * float(b)
  16. if '/' in exp:
  17. a, b = exp.split('/')
  18. return float(a) / float(b)
  19. #计算表达式中所有加减法
  20. def remove_addsub(exp):
  21. ret=re.findall('[-+]?\d+(?:\.\d+)?',exp)
  22. # count=0
  23. # for i in ret:
  24. # count+=float(i)
  25. # print(count)
  26. res=reduce(lambda a,b:float(a)+float(b),ret)
  27. return res
  28. #计算表达式中的所有乘除法
  29. import re
  30. def remove_muldiv(exp):
  31. while True:
  32. ret=re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?',exp)
  33. if ret:
  34. son_exp=ret.group()
  35. print([son_exp])
  36. res=mul_div(son_exp)
  37. print(res)
  38. exp=exp.replace(son_exp,str(res))
  39. print('-->',exp) #1+12.0*5/6
  40. else:
  41. break
  42. return exp
  43. #计算乘除法
  44. ret=remove_muldiv('1+3*4*5/6')
  45. print(ret)
  46. #计算加减法
  47. exp='1+2.238-++317+-428-5+6'
  48. exp=exp_fmt(exp)
  49. ret=remove_addsub(exp)
  50. print(ret)
  51. # 下一步
  52. # 计算加减乘除四则运算的表达式
  53. # 并去括号

今日内容

  • 面向对象三大特性:

    • 继承
    • 封装
    • 多态
  • 继承

    1. # 猫:
    2. # 吃
    3. # 喝
    4. # 睡
    5. # 爬树
    6. # 狗:
    7. # 吃
    8. # 喝
    9. # 睡
    10. # 看家
    11. class Cat:
    12. def __init__(self,name):
    13. self.name=name
    14. def eat(self):
    15. print('%s eat'%self.name)
    16. def drink(self):
    17. print('%s drink'%self.name)
    18. def sleep(self):
    19. print('%s sleep'%self.name)
    20. def climb(self):
    21. print('%s climb'%self.name)
    22. class Dog:
    23. def __init__(self, name):
    24. self.name = name
    25. def eat(self):
    26. print('%s eat' % self.name)
    27. def drink(self):
    28. print('%s drink' % self.name)
    29. def sleep(self):
    30. print('%s sleep' % self.name)
    31. def house_keep(self):
    32. print('%s house_keep' % self.name)
    33. #上面两个类有重叠部分
    34. 小白=Cat('小白')
    35. 小白.eat()
    36. 小白.drink()
    37. 小白.sleep()
    38. 小白.climb()
    39. 小黑=Dog('小黑')
    40. 小黑.eat()
    41. 小黑.drink()
    42. 小黑.sleep()
    43. 小黑.house_keep()
    44. #继承----需要解决代码的重复
    45. #继承语法:
    46. class A:
    47. pass
    48. class B(A):
    49. pass
    50. #B继承A,A是父类,B是子类
    51. #A是父类、基类、超类
    52. #B是子类、派生类
    53. #对于上述猫狗的代码,可以定义一个父类,把重复的放在父类
    54. class Animal:
    55. def __init__(self, name):
    56. self.name = name
    57. def eat(self):
    58. print('%s eat' % self.name)
    59. def drink(self):
    60. print('%s drink' % self.name)
    61. def sleep(self):
    62. print('%s sleep' % self.name)
    63. class Cat(Animal):
    64. def climb(self):
    65. print('%s climb'%self.name)
    66. class Dog(Animal):
    67. def house_keep(self):
    68. print('%s house_keep' % self.name)

    子类可以使用父类中的方法

    子类和父类中有相同方法时,会优先从自己的类空间找方法,即只使用子类的方法。

    • 有时,子类想要调用父类方法的同时,还想要执行自己的同名方法。

      • 在自己的eat方法中调用父类的方法,此时self.eat应改为Animal.eat

    • 父类和子类方法的选择:

      • 自己有,用自己的
      • 自己没有,用父类的
      • 自己有还想用父类的,self换成父类名
  • 多继承:有好几个爹(java不支持多继承,py支持)

内容补充

  • object类 类祖宗

    所有在python3中的类,都是继承object类的

    object中有init

    所有的类都默认继承object

  • 类中的绑定方法和普通函数

    • 类调用函数是普通函数:A.eat()
    • 对象调用函数是绑定方法:a.eat()
  • 类中很有必要添加注释,写在类的开头或函数的开头

  • pickle

    1. #pickle
    2. class Course:
    3. def __init__(self,name,period,price):
    4. self.name=name
    5. self.period=period
    6. self.price=price
    7. # python=Course('python','6 month',21800)
    8. import pickle
    9. # with open('pickle_file',mode='wb')as f:
    10. # pickle.dump(python,f)
    11. with open('pickle_file','rb')as f:
    12. while True:
    13. try:
    14. #可迭代取内容
    15. python=pickle.load(f)
    16. print(python.name)
    17. print(python.price)

明日学习

队列、栈、多继承等

代码总行数2538+164=2702行

python24day的更多相关文章

随机推荐

  1. 【LeetCode】1022. Sum of Root To Leaf Binary Numbers 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetco ...

  2. 【LeetCode】140. Word Break II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归求解 日期 题目地址:https://leetc ...

  3. 【LeetCode】567. Permutation in String 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/permutati ...

  4. struts2升级至2.3.24方法

    1.替换如下jar包 2.修改web.xml中的struts过滤器配置 将原来的过滤配置注释掉 替换为: 3.struts.xml配置 4. 发现程序中有类报错:缺少  import org.apac ...

  5. TKE用户故事 | 作业帮检索服务基于Fluid的计算存储分离实践

    作者 吕亚霖,2019年加入作业帮,作业帮基础架构-架构研发团队负责人,在作业帮期间主导了云原生架构演进.推动实施容器化改造.服务治理.GO微服务框架.DevOps的落地实践. 张浩然,2019年加入 ...

  6. 关于 Spring-WebFlux 的一些想法

    本文是本人在知乎提问 spring webflux现在看来是否成功? 下的回答,其他回答也很精彩,如果感兴趣可以查看 现在基于 spring web 的同步微服务有一个非常大的缺陷就是:相对于基于 s ...

  7. elasticsearch之警惕inner hits的性能问题

    一.inner hits简介 elasticsearch提供了nested数据类型来处理主子文档的问题,可以解决子文档字段被分裂平铺导致字段之间失去了整体的关联性: elasticsearch提供的i ...

  8. games101 - 4 - Ray Tracing

    games101 - 4 - Ray Tracing 目录 games101 - 4 - Ray Tracing 为什么需要Ray Tracing Recursive (Whitted-Style) ...

  9. frp + nginx 配置多人共用的http 内网穿透服务

    来源:简书   https://www.jianshu.com/p/c9d7527d607b 一. 前言 frp 是一个用Go语言开发的,可用于内网穿透的高性能的反向代理应用,支持 tcp, udp ...

  10. spring security 动态 修改当前登录用户的 权限

    1.前言 spring security 可以获取当前登录的用户信息,同时提供了接口 来修改权限列表信息 , 使用这个方法 ,可以动态的修改当前登录用户权限. 那么问题来了... 如果我是管理员 ,如 ...