zoukankan      html  css  js  c++  java
  • 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())

    输出

    狗在吃
    猫在吃
    动物在吃
  • 相关阅读:
    asp.net大文件断点续传
    JS大文件上传解决方案
    B/S大文件上传解决方案
    B/S上传整个文件夹
    网页上传整个文件夹
    POJ 1068 Parencodings
    74LS85 比較器 【数字电路】
    二叉树的建立与先序,后序,中序输出
    Android 学习之 开源项目PullToRefresh的使用
    理解矩阵及谱聚类小记
  • 原文地址:https://www.cnblogs.com/chushujin/p/13169823.html
Copyright © 2011-2022 走看看