Python语言面向对象——继承
小标 2019-01-17 来源 : 阅读 918 评论 0

摘要:本文主要向大家介绍了Python语言面向对象——继承,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了Python语言面向对象——继承,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

#coding:utf-8
 
"""
术语:
1、在python3中,自定义创建的类都默认继承了python类中名为object的类
2、object类提供的方法,是双下划线开头的,是为了提供给python内部使用
3、被继承的类叫做超类,或者叫做父类
4、从超类(父类)继承过来的类叫做子类
5、子类来源于父类,又或者说,子类扩展了父类的功能
"""
"""
#扩展类:给一个已经存在的类添加新的行为(方法)
class Util: #我定义的这个类(意图是工具类),没有明确继承谁,所以它默认继承object类
    #定义扫描ip范围的方法
    def scan_ip_range(self, ip_range):
        print("start scan ip range: ", ip_range)
class ChildUtil(Util): #这个类继承了Util类
    #添加一个扫描端口的功能
    def scan_port(self, port):
        print("start scan port: ", port)
 
if __name__ == '__main__':
    s = ChildUtil() #实例化子类后,创建出了对象s
    s.scan_ip_range("10.36.1.0/24") #扫描IP范围的方法是从父类继承过来的
    s.scan_port(80) #扫描端口的方法是在子类中扩展的
"""
 
"""
#重写普通方法
# 1、重写就是,比如父类里有a方法,但是对a方法不满意,需要重写
# 2、解决办法就是,在子类中写一个和父类中a方法名字一样的方法,名字也叫a
# 3、因此,这样就等价于重写了
 
class Supper():
    def a(self):
        print("hello a")
class Child(Supper):
    def a(self):
        print("Hi! a...")
if __name__ == '__main__':
    o = Child()
    o.a() #此刻的调用是子类中的a方法
 
    #如果把子类中的a方法去掉,那么调用则是父类中的a方法
    # 测试结论:
    # 1、子类中的a方法只是覆盖了父类中的a方法,所以父类中的a方法还是存在的
    # 2、如果子类没有a方法,则会到父类中去找,父类没有的话会到object类中找,还是没有则引发异常
    # 3、因此,可以看出这个查找顺序是就近原则
"""
 
#重写__init__(),普通方法可以重写,初始化也是可以从写的
"""
例如:
有一个类用来描述物理机对象,并且对象有主机名、IP地址、操作系统这3个基本属性
还有一个类用来描述vmware的虚拟机对象,也有和物理机一样的3个属性,但是虚拟机还有一个vmtools属性
那么,在定义虚拟机类的时候,难道要再重新定义一遍主机名、IP地址、操作系统这三个属性?
那么虚拟机类既然还有一个vmtools属性,那么肯定就有初始化方法,但是描述物理机对象的类也有初始化方法
这特么就引发问题了,解决代码如下
"""
"""
class Host:
    def __init__(self, hostname, ip, os):
        self.hostname = hostname
        self.ip = ip
        self.os = os
 
    def get_info(self):
        print(self.hostname, self.ip, self.os)
 
class Vm(Host):
    def __init__(self, hostname, ip, os, vmtools):
        super().__init__(hostname, ip, os) #super的功能就是调用父类的代码
        self.vmtools = vmtools
 
    #重写了父类的get_info方法
    def get_info(self):
        super().get_info() #super的功能就是调用父类的代码
        print(self.vmtools, )
 
if __name__ == '__main__':
 
    v = Vm("vm1","10.2.3.4","centos6.5", "vmtools_v1")
    v.get_info()
"""
 
#多重继承
"""
就是有父类A,父类B,一个子类C,但是类C什么都没有
类C同时继承了父类A和B,这时候,C就拥有了父类A和B的属性和方法,都被继承过来了
"""
class A:
    def get_a(self):
        print("my a...")
class B:
    def get_b(self):
        print("my b...")
 
class C(A, B): #继承A和B
    pass
 
if __name__ == '__main__':
 
    c = C()
    c.get_a()
    c.get_b()
 
    #应用场景一目了然,不用多说什么
     #在查找顺序,首先是在C类找,那么,然后是在A找还是在B找?这涉及到一个查找方式的问题
     #多重继承,有两种搜索方式,分别是深度优先和广度优先,具体的自行google    

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程