Python3-2020-测试开发-21- 面向对象之封装,继承,多态
一、面向对象三大特征
"""面向对象三大特征"""
"""
封装(隐藏),继承,多态
封装:隐藏对象的属性和实现的细节,只对外提供必要的方法
继承:继承可以让子类具有父类的特性,提高了代码的重用性,代码复用的重要手段
多态:是指同一个方法调用由于对象不同产生的不同行为
二、继承
如下例子:
class Person: def __init__(self,name,age): self.name = name self.__age = age # 私有属性 def say_age(self): print("我的年龄"+self.__age) def say_name(self): print("我的姓名为:"+self.name) class Student(Person): def __init__(self,name,age,score): Person.__init__(self,name,age) self.score = score def say_name(self): """ 重写父类的方法 :return: """ print("重写后的,我的姓名为:"+self.name)
继承父类的方法:
s = Student("chu01","18",10) s.say_age() ----------------------- 18
继承父类的属性(包含私有属性,访问方式如下)
print(s.name) # print(s.age) 'Student' object has no attribute 'age', print(s._Person__age)
-------------------
18
方法的重写
s.say_name() ---------------------- 重写后的,我的姓名为:chu01
查看继承关系
# 查看继承关系 print(Student.mro()) # <class '__main__.Student'>, <class '__main__.Person'>, <class 'object'>]
查看所有对象的属性
# 查看对象的所有的属性 print(dir(s)) ---------------- ['_Person__age', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_age', 'say_name', 'score']
重写object中的__str__()方法
# 重写object中的__str__()方法 print(s) # <__main__.Student object at 0x1135ff7f0> ------------------ 重写后 ---------------------------------------------- def __str__(self): return "11111" print(s) # 11111
多继承,可通过(类.mro()查看继承先手顺序)
""" 多个父类有相同的方法名称,那么多继承时候,继承哪个,可以使用mro()方法 """ class A: def say(self): print("A") class B: def say(self): print("B") class C(B,A): def cc(self): print("cc") c = C() print(C.mro()) c.say() ------------------------- [<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>] B
三、多态
"""多态""" # 多态是指同一个方法调用由于对象不同可能产生不同的行为 # 1. 多态是方法的多态,属性没有多态 # 2. 多态存在有2和必要条件:继承,方法的重写 class Animal: def eat(self): print("动物在吃") class Dog(Animal): def eat(self): print("狗在吃") class Cat(Animal): def eat(self): print("猫在吃") def enEat(m): if isinstance(m,Animal): m.eat() else: print("不能吃!") enEat(Dog()) enEat(Cat()) enEat(Animal())
输出
狗在吃
猫在吃
动物在吃
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。