01_类的定义

  1. class Student(object):
  2. # 定义成员变量,都在__init__函数中
  3. def __init__(self,name,age,height):
  4. self.name = name
  5. self.age = age
  6. self.height = height
  7. # 显示信息
  8. def ShowInfo(self):
  9. print(self.name,self.age,self.height)
  10. # 设置信息
  11. def SetInfo(self,name,age,height):
  12. self.name = name
  13. self.age = age
  14. self.height = height
  15. stu1 = Student("周瑜", 18 , 180.5)
  16. stu1.address = "江东"
  17. stu1.ShowInfo()

02_类属性与对象属性

  1. class Student(object):
  2. count = 10 # 类属性
  3. # 定义成员变量,都在__init__函数中
  4. def __init__(self,name,age,height):
  5. self.name = name
  6. self.age = age
  7. self.height = height
  8. Student.count+=1
  9. # 显示信息
  10. def ShowInfo(self):
  11. print(self.name,self.age,self.height)
  12. # 设置信息
  13. def SetInfo(self,name,age,height):
  14. self.name = name
  15. self.age = age
  16. self.height = height
  17. @classmethod
  18. def PrintfStuCount(cls):
  19. print(cls.count)
  20. stu1 = Student("周瑜", 18 , 180.5)
  21. stu2 = Student("黄盖", 18 , 175)
  22. # 通过类名调用类方法
  23. Student.PrintfStuCount()
  24. 访问类属性的时候,最好通过类名去使用
  25. Student.count = 100
  26. stu1.count = 50 它相当于给stu1动态添加了成员变量
  27. print(stu1.count)
  28. print(stu2.count)

03_权限保护

  1. class Student(object):
  2. count = 10 # 类属性
  3. # 定义成员变量,都在__init__函数中
  4. def __init__(self,name,age,height):
  5. self.name = name # 公有的
  6. self._age = age # 保护的
  7. self.__height = height # 私有的
  8. Student.count+=1
  9. # 显示信息
  10. def ShowInfo(self):
  11. print(self.name,self.age,self.height)
  12. # 设置信息
  13. def SetInfo(self,name,age,height):
  14. self.name = name
  15. self.age = age
  16. self.height = height
  17. stu1 = Student("周瑜", 18 , 180.5)
  18. # print(stu1.__dict__)
  19. print( stu1.name )
  20. print( stu1._age ) # 单下划线也是能访问的
  21. print( stu1._Student__height ) # 双下划线是修改了一下名字

04_继承

  1. class Animal(object):
  2. def __init__(self,name):
  3. self.name = name
  4. def walk(self):
  5. print("我会走")
  6. def eat(self):
  7. print("我会吃饭")
  8. class Dog(Animal):
  9. def __init__(self,name,breed):
  10. self.breed = breed
  11. # python中父类的构造,可以不调用
  12. # 我们需要想着调用一下
  13. Animal.__init__(self,name)
  14. def bite(self):
  15. print("我会咬人")
  16. def eat(self):
  17. print("我会吃骨头")
  18. dog1 = Dog("小白","哈士奇")
  19. dog1.walk() # 调用父类的函数
  20. dog1.bite() # 调用子类的函数
  21. dog1.eat() # 重定义的时候调用的是子类自己的函数

05_多继承

  1. class Animal(object):
  2. def __init__(self,name):
  3. self.name = name
  4. def walk(self):
  5. print("我会走")
  6. def eat(self):
  7. print("我会吃饭")
  8. class Test(object):
  9. def FunTest(self):
  10. print("我是FunTest")
  11. class Dog(Animal,Test):
  12. def __init__(self,name,breed):
  13. self.breed = breed
  14. # python中父类的构造,可以不调用
  15. # 我们需要想着调用一下
  16. Animal.__init__(self,name)
  17. def bite(self):
  18. print("我会咬人")
  19. def eat(self):
  20. print("我会吃骨头")
  21. dog1 = Dog("小白","哈士奇")
  22. dog1.walk() # 调用父类的函数
  23. dog1.bite() # 调用子类的函数
  24. dog1.eat() # 重定义的时候调用的是子类自己的函数
  25. dog1.FunTest() # 调用另外一个父类的函数

06_菱形继承

  1. # 天然的python就解决的二义性问题
  2. # 数据不产生二义性
  3. # 函数 是先找到谁就使用谁
  4. class TestBase(object):
  5. def __init__(self):
  6. self.test = 1
  7. def fun(self):
  8. print("我是Base的Fun")
  9. class TestA(TestBase):
  10. def __init__(self):
  11. self.test = 10
  12. TestBase.__init__(self)
  13. def fun(self):
  14. print("我是TestA的Fun")
  15. class TestB(TestBase):
  16. def __init__(self):
  17. self.test = 20
  18. TestBase.__init__(self)
  19. def fun(self):
  20. print("我是TestB的Fun")
  21. class TestC(TestA,TestB):
  22. def __init__(self):
  23. TestA.__init__(self)
  24. TestB.__init__(self)
  25. self.test = 100
  26. obj1 = TestC()
  27. print(obj1.__dict__)
  28. obj1.fun()

07_多态

  1. class Duck(object):
  2. def guaguagua(self):
  3. print("呱呱呱")
  4. class YellowDuck(Duck):
  5. def guaguagua(self):
  6. print("呱呱")
  7. class Cat(object):
  8. def miaomiao(self):
  9. print("喵喵喵")
  10. def guaguagua(self):
  11. print("呱呱呱")
  12. def Fun(obj):
  13. # 判断 obj是Duck类或者Duck类的子类
  14. if isinstance(obj,Duck):
  15. obj.guaguagua()
  16. objDuck = Duck()
  17. objCat = Cat()
  18. objDuck2 = YellowDuck()
  19. Fun(objCat)
  20. Fun(objDuck2)

08_异常处理

  1. # 在我们编写代码的时候,完全可以将所有的代码,都放置在try中
  2. # 进行异常处理,只有好处。
  3. # python中的异常是有类型的,不同种类的异常需要使用
  4. # 不同的类型去接收
  5. # 被保护的代码放在try中,except的后面放置要处理的异常类型
  6. # try:
  7. # # print(a)
  8. # li = [10,20,30,40,50]
  9. # print(li[5])
  10. # except IndexError:
  11. # pass
  12. # print("15pb")
  13. # 1. 异常是可以嵌套的,嵌套了之后,内层处理不了,会往外传递
  14. # 2. 一个try的后面,可以跟随多个except
  15. # 3. 主动抛出异常 使用 Raise函数抛出异常
  16. def fun():
  17. try:
  18. # 我们可以主动抛出异常
  19. name = input('please input name:')
  20. if name == 'hello':
  21. raise NameError('input name error !')
  22. # print(a)
  23. li = [10,20,30,40,50]
  24. print(li[5])
  25. # 捕获异常的同时,可以得到异常信息字符串
  26. except NameError as msg:
  27. print("nameError:",msg)
  28. except IndexError as msg:
  29. print("InnerIndexError:",msg)
  30. # 无论以何种方式,要离开try块,都会执行finally,我们
  31. # 可以在这里进行一定的资源清理 比如 关闭文件,断开网络....
  32. finally:
  33. print("我要结束了,需要清理一些资源")
  34. try:
  35. fun()
  36. except IndexError as msg:
  37. print("OuterIndexError:",msg)
  38. # 这个一般都是放在最外层的最后一个处理
  39. except Exception as msg:
  40. print("这里是通用异常处理,所有的异常我都能捕获",msg)
  41. print("15pb")

09_Filter

  1. # 题目:过滤其中的偶数
  2. li = [213,21,321,4,435,45,56,7,657,51,34,123,43,4,45]
  3. # 方法1:
  4. li2 = []
  5. for i in li:
  6. if i%2==0:
  7. li2.append(i)
  8. print(li2)
  9. # 方法2
  10. li3 = [i for i in li if i%2==0]
  11. print(li3)
  12. # 3 新方法
  13. # filter这个函数,会将后面的可迭代对象中的每一个元素
  14. # 放入 fun中,如果fun返回True,就会留下这个元素 如果fun返回False
  15. # 就不会留下这个元素
  16. def fun(num):
  17. if num%2 ==0:
  18. return True
  19. else:
  20. return False
  21. li = [213,21,321,4,435,45,56,7,657,51,34,123,43,4,45]
  22. li4 = list(filter(fun,li))
  23. print(li4)

10_reduce

  1. # 求得列表中,每一个元素的和
  2. # 原始方法
  3. li = [1,2,3,4,5]
  4. li_add = 0
  5. for ele in li:
  6. li_add += ele
  7. print(li_add)
  8. # 新方法
  9. from functools import reduce
  10. li = [1,2,3,4,5]
  11. def func(a,b):
  12. return a+b
  13. num = reduce(func,li)
  14. print(num)

11_map

  1. # 得到一个新列表,元素是下面列表中元素的2倍
  2. li1 = [1,2,3,4,5]
  3. li2 = []
  4. for ele in li1:
  5. li2.append(ele*2)
  6. print(li2)
  7. # 新方法
  8. def func(num):
  9. return num*2
  10. li3 = list(map(func,li1))
  11. print(li3)

12_匿名函数

  1. # 匿名函数的调用
  2. add = lambda x,y:x+y
  3. num = add(10,20)
  4. # print(num)
  5. # 但是上面的写法,给add赋值了,就相当于还是一个有名字的函数了
  6. # 和下面没有任何区别
  7. def add(x,y):
  8. return x+y
  9. # 那么为什么还要匿名函数呢?? 在使用高阶函数的时候更方便
  10. # 比如
  11. li = [213,21,321,4,435,45,56,7,657,51,34,123,43,4,45]
  12. li1 = list(filter(lambda x : x%2 == 0,li))
  13. print(li1)
  14. # 再比如
  15. from functools import reduce
  16. li = [1,2,3,4,5]
  17. num = reduce(lambda x,y:x+y,li)
  18. print(num)
  19. # 再比如
  20. li1 = [1,2,3,4,5]
  21. li3 = list(map(lambda x:2*x,li1))
  22. print(li3)