码迷,mamicode.com
首页 > 编程语言 > 详细

Python面向对象——继承

时间:2017-12-29 17:51:03      阅读:143      评论:0      收藏:0      [点我收藏+]

标签: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类继承

原文地址:http://blog.51cto.com/freshair/2055934

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!