• python的类继承与派生


    一、继承和派生简介:

      其实是一个一个事物站在不同角度去看,说白了就是基于一个或几个类定义一个新的类。比如定义了动物类接着派生出了人类,你也可以说人类继承了动物类。一个意思。此外python类似于C和C++支持多继承,一个类可以继承多个类,比如爸爸妈妈生了孩子,孩子继承了爸爸妈妈的属性和方法等等。此外由于python3中的所有类都是新式类,python2中也可以通过继承object来定义新式类,所以治理统一按照新式类的语法来介绍,为了兼容python2和python3,个人推荐一律使用新式类。

    二、如何定义类的继承与多继承

    1、定义类的继承与多继承

    1.1继承

     1 class person(object):
     2     def __init__(self,name,age,gender,pid):
     3         self.name = name
     4         self.age = age
     5         self.gender = gender
     6         self.pid = pid
     7         print("Create Person")
     8     def showname(self):
     9         print("Name:%s"%self.name)
    10 
    11 class student(person):
    12     def __init__(self,name,age,gender,pid,sid,level,school):
    13         super(student,self).__init__(name,age,gender,pid)
    14         self.sid = sid
    15         self.level = level
    16         self.school = school
    17         print("Create Student")
    18 
    19     def showsid(self):
    20         print("StudentID:%s"%self.sid)

    1.2多继承

     1 class father(object):
     2     def __init__(self,name,money):
     3         self._fname = name
     4         self.fmoney = money
     5 
     6 class mother(object):
     7     def __init__(self,name,money):
     8         self._mname = name
     9         self.mmoney = money
    10 
    11 class baby(father,mother):
    12     def __init__(self,n0,n1,n2,m1,m2,):
    13         self.name = n0
    14         father.__init__(self,n1,m1)
    15         mother.__init__(self,n2,m2)
    16         self.money = self.fmoney + self.mmoney

    三、变量和属性的继承约束:

    1、实例的属性与方法的继承要求:

    #实例属性与方法的继承:
    """
    1、普通实例变量可以继承,保护实例(单下划线)变量可以继承,隐藏实例(双下划线)变量不可继承。
    2、普通实例方法可以继承,保护实例(单下划线)方法可以继承,隐藏实例(双下划线)方法不可继承。
    """

    2、类的属性与方法的继承要求:

    注:类变量是所有该类的实例和类本身的一个全局变量,类变量修改了,属性调用这个变量也随之修改了。而实例变量却是相互独立。类属性和方法,实例都可以调用。

    #类属性与方法的继承:
    """
    1、普通类变量可以继承,保护类(单下划线)变量可以继承,隐藏类(双下划线)变量不可继承。
    2、普通类方法可以继承,保护类(单下划线)方法可以继承,隐藏类(双下划线)方法不可继承。
    """

    3、静态方法的继承:

    静态方法的继承约束与前两个完全相同,类和实例都可以调用。

    4、对于父类的实例、类、静态方法或属性的调用:

    继承之后可以直接调用,只要满足进程约束条件即可。

    四、重载父类方法:

    1、子类重载父类(类、实例、静态)方法后,子类和子类对象会按照新定义的(类、实例、静态)方法去执行。父类及其实例不变,保持原方法执行。

     1 class person(object):
     2     check = 0
     3     def __init__(self,name,age,gender,pid):
     4         self.name = name
     5         self.age = age
     6         self.gender = gender
     7         self.pid = pid
     8         print("Create Person")
     9     @classmethod
    10     def __showcheck(cls):
    11         print(cls.check)
    12     def showid(self):
    13         print("PersonID:%s"%self.pid)
    14     @staticmethod
    15     def abcd():
    16         print "abcd"
    17 
    18 class student(person):
    19     def __init__(self,name,age,gender,pid,sid,level,school):
    20         super(student,self).__init__(name,age,gender,pid)
    21         self.sid = sid
    22         self.level = level
    23         self.school = school
    24         print("Create Student")
    25 
    26     def showid(self):
    27         print "********************************"
    28         print("PersonID:%s"%self.pid)
    29         print("StudentID:%s"%self.sid)
    30         print "********************************"
  • 相关阅读:
    CVE-2019-16278:Nostromo Web服务器的远程命令执行
    内网渗透一(信息收集)
    Apache Flink 任意jar包上传漏洞
    Apache ---- Solrl漏洞复现
    linux内核过高导致vm打开出错修复脚本
    lvm拓展
    文件时间进度扫描控制,可回溯,空闲扫描,系统时间调整不影响
    Raid 管理
    curl 工具使用
    docker 入门
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8527548.html
Copyright © 2020-2023  润新知