IT评测·应用市场-qidao123.com

标题: 15面向对象特性 [打印本页]

作者: 魏晓东    时间: 2023-4-23 19:53
标题: 15面向对象特性
面向对象特性

封装

  1. class Person:
  2.     def __init__(self, name, age):
  3.         self.__name = name
  4.         self.age = age
  5.     # 私有方法
  6.     def __getname(self):
  7.         # print(self.__name)
  8.         print(f'{self.__name}')
  9.     # 实例方法
  10.     def printinfo(self):
  11.         print(f'{self.__name},{self.age}')
  12. p = Person('zhangsan', 18)
  13. p.printinfo()
复制代码
继承

单继承

单继承指的是子类只继承一个父类 当对象调用方法时,查找顺序先从自身类找,如果自身没找到,则去父类找,父类无,再到父类的父类找,直到object类,若还无,则报错。这也称为 深度优先机制。
  1. # 单继承
  2. class Grandfather:
  3.     def __init__(self):
  4.         print('Grandfather')
  5.     def sleep(self):
  6.         print("sleep")
  7. class Father(Grandfather):
  8.     def eat(self):
  9.         print("eat")
  10.     def drink(self):
  11.         print("drink")
  12. class Son(Father):
  13.     def study_python(self):
  14.         print("python")
  15. s = Son()
  16. s.study_python()
  17. s.eat()
  18. s.sleep()
复制代码
多继承

多继承指的是子类继承了多个父类。并且具有它们的特征。
  1. """情景1"""
  2. class Father1:
  3.     def run(self):
  4.         print("father1 run")
  5. class Father2:
  6.     def run(self):
  7.         print("father2 run")
  8. class Son(Father1, Father2):  # 拥有相同方法时,左边优先执行
  9.     pass
  10. s = Son()
  11. s.run()
复制代码
  1. """情景2"""
  2. class Grandfather:
  3.     def sleep(self):
  4.         print("Grandfather sleep")
  5. class Father1(Grandfather):
  6.     def run(self):
  7.         print("father1 run")
  8. class Father2:
  9.     def sleep(self):
  10.         print(" Father2 sleep")
  11. class Son(Father1, Father2):  # 必须要左边的执行完了,才会执行右边的父类
  12.     pass
  13. s = Son()
  14. s.sleep()
复制代码
  1. """情景3"""
  2. class Grandfather1:
  3.     def sleep(self):
  4.         print("sleep 12")
  5. class Father1(Grandfather1):
  6.     def run(self):
  7.         print("father1 run")
  8. class Father2(Grandfather1):
  9.     def sleep(self):
  10.         print("sleep 6")
  11. class Son(Father1, Father2):  # 如果同根的话,根是最后才执行的
  12.     pass
  13. s = Son()
  14. s.sleep()
  15. print(Son.__mro__)  # 通过mro方法可以程序执行或者继承顺序的情况
  16. # (<class '__main__.Son'>, <class '__main__.Father1'>, <class '__main__.Father2'>, <class '__main__.Grandfather1'>, <class 'object'>)
复制代码
方法的重写

当子类与父类拥有同名称的方法时,子类对象调用该方法优先执行自身的方法。那么实际上就是子类的方法覆盖父类的方法,也称为重写。实际的开发中,遵循开放封闭原则。我们并不会完全的重写父类的方法,而是希望同时实现父类的功能。
  1. # 相对而言是我们B的父类
  2. class A:
  3.     # init同时也能够被继承
  4.     def __init__(self):
  5.         print('A')
  6.     def test(self):
  7.         print("aaaa")
  8. # B继承了A 子类
  9. class B(A):
  10.     def __init__(self):
  11.         print('B')
  12.         # A.__init__(self)
  13.         super(B, self).__init__()
  14.     # 子类重写父类的同名方法
  15.     def test(self):
  16.         print("bbbb")
  17.         # 对该方法进行重写,同时实现子类和父类的功能 三个方法都可以
  18.         # super(B, self).test()
  19.         # super().test()
  20.         # A.test(self)   # 通过类名.方法名 强写 不推荐
  21. b = B()  # 创建了B的对象
  22. b.test()  # bbbb
  23. """
  24. 若将test方法里的注释放开,则也会打印A中test方法中的aaaa
  25. """
复制代码
多态

Python中函数的参数是没有类型限制的,所以多态在python中的体现并不是很严谨。多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。python是弱语言类型。
1、实现多态的步骤:

1)定义一个父类(Base),实现某个方法(比如:run)
2)定义多个子类,在子类中重写父类的方法(run),每个子类run方法实现不同的功能
3)假设我们定义了一个函数,需要一个Base类型的对象的参数,那么调用函数的时候,传入Base类不同的子类对象,那么这个函数就会执行不同的功能,这就是多态的体现。
  1. class Animal(object):
  2.     """动物类"""
  3.     def func(self):
  4.         print('动物发出了声音')
  5. class Cat(Animal):
  6.     """猫类"""
  7.     def func(self):
  8.         print('喵 喵 喵')
  9. class Dog(Animal):
  10.     """狗类"""
  11.     def func(self):
  12.         print('汪 汪 汪 ')
  13. class Hero:
  14.     def func(self):
  15.         print('这个是英雄类的方法,不是动物类的对象')
  16. def work01(Animal):
  17.     Animal.func()
  18. work01(Dog())  # 传入的对象 结果:汪 汪 汪
  19. work01(Animal())  # 动物发出了声音
  20. # 传入不同的对象,产生不同的结果
  21. # 调用灵活 更容易编写出通用的代码
复制代码
多态的意义:
(1)在程序运行过程中展现出动态的特性,在程序编译的时候无法知道调用哪个函数
(2)函数重写必须多态实现,否则没有意义
(3)多态是面向对象组件化程序设计的基础特性
注意点:Python中函数的参数是没有类型限制的,所以多态在python中的体现并不是很严谨。多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。
鸭子类型

  1. class Duck:
  2.     def quack(self):
  3.         print("嘎嘎嘎嘎。。。。。")
  4. class Bird:
  5.     def quack(self):
  6.         print("bird imitate duck....")
  7. class geese:
  8.     def quack(self):
  9.         print("geese imitate duck....")
  10. def in_the_forest(duck):
  11.     duck.quack()
  12. duck = Duck()
  13. bird = Bird()
  14. geese = geese()
  15. for x in [duck, bird, geese]:
  16.     in_the_forest(x)
  17. """
  18. 嘎嘎嘎嘎。。。。。
  19. bird imitate duck....
  20. geese imitate duck....
  21. """
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4