当前位置 博文首页 > Python面向对象封装继承和多态示例讲解

    Python面向对象封装继承和多态示例讲解

    作者:互联网老辛 时间:2021-04-30 17:53

    面向对象的三大特征:封装,继承,多态

    1.封装: 提高程序的安全性

    • 将数据(属性)和行为(方法)包装到类对象中,在方法内部对属性进行对象的外部调用方法。 这样无需关心内部的具体实现。
    • 在python中没有专门的修饰符用于属性的私有,如果属性不希望被访问,前面使用两个下划线

    2.继承: 提高代码的复用性

    3.提高程序的可拓展性和可 维护性。

    1. 封装

    我们来看看私有方式的使用:

    # 作者:互联网老辛
    # 开发时间:2021/4/4/0004 22:11
    class Student:
        def __init__(self,name,age):
            self.name=name
            self.__age=age
    
        def show(self):
            print(self.name,self.__age)
    
    laoxin=Student('互联网老辛',38)
    laoxin.show()
    print(laoxin.name)
    print(laoxin.__age)

    在这里插入图片描述

    私有属性如何被访问呢?
    可以通过下面的形式来访问

    在这里插入图片描述

    print(laoxin.Student_ _ age)的形式进行访问

    但一般情况下,我们看到私有方法,就尽量不要访问了。

    2. 继承

    语法格式:
    class 子类类名(父类1,父类2)
    pass

    • 如果一个类没有继承任何类,默认集成object
    • python支持多继承
    • 定义子类时候,必须在其构造函数中调用父类的构造函数
    # 作者:互联网老辛
    # 开发时间:2021/4/4/0004 22:11
    class Person(object):
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def info(self):
            print(self.name,self.age)
    
    class Student(Person):
        def __init__(self,name,age,sut_no):
            super().__init__(name,age)
            self.sut_no=sut_no
    
    class Teacher(Person):
        def __init__(self,name,age,teachofyear):
            super(Teacher, self).__init__(name,age)
            self.teachofyear=teachofyear
    
    stu=Student('互联网老辛',40,1001)
    teacher=Teacher('高胜寒',38,10)
    
    stu.info()
    teacher.info()

    在Python中还可以支持多继承

    比如校长,既能集成person类,又能继承teacher类。

    多态的实现

    多态就是具有多种形态,意思是,即使不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用的对象类型,动态的决定调用哪个对象中的方法。

    # 作者:互联网老辛
    # 开发时间:2021/4/4/0004 22:11
    class Animal(object):
        def eat(self):
            print("动物需要吃东西")
    class Dog(Animal):
        def eat(self):
            print('狗吃骨头')  #重写方法
    
    class Cat(Animal):
        def eat(self):
            print('猫吃鱼')
    
    class Person:  #没有集成任何类
        def eat(self):
            print('人吃植物')
    
    def fun(obj):
        obj.eat()
    
    fun(Cat())
    fun(Dog())
    fun(Animal())
    
    fun(Person()) #但是他也能调用方法

    原因:
    Python是一种动态语言,静态语言要想实现多态,必须明确继承,然后才能使用,而动态语言只关心是否具有这个方法,关于类不管。

    js
    下一篇:没有了