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

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

时间: 2024-11-06 12:36:32

Python面向对象——继承的相关文章

Python 面向对象继承

一 什么是面向对象的继承 比较官方的说法就是: 继承(英语:inheritance)是面向对象软件技术当中的一个概念.如果一个类别A"继承自"另一个类别B,就把这个A称为"B的子类别",而把B称为"A的父类别"也可以称"B是A的超类".继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码.在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功

python 面向对象——继承与多态

Python是面向对象的编程语言,面向对象的基本单元是类 类的声明: 1 class class_name(): 2 pass 测试如下: In [1]: class c(): ...: pass ...: In [2]: a=c() In [3]: a Out[3]: <__main__.c instance at 0x07500A30> 类的继承: 1 In [4]: class base(): 2 ...: def f(self): 3 ...: print 'base' 4 ...:

Python面向对象(继承)

面向对象三大特性:继承 1 class F: 2 def f1(self): 3 print("F.f1") 4 5 def f2(self): 6 print("F.f2") 7 8 class S(F):#子类继承父类 9 def s1(self): 10 print("S.s1") 11 12 obj = S() 13 14 obj.s1() 15 obj.f1()#继承了父类的方法 子类对象继承了父类的方法. 执行结果: S.s1 F.f

Python面向对象之类的封装、继承与多态

Python面向对象中类的三大特性,即封装.继承与多态,同时也是所有语言在面向对象编程中的重要特性,下面用实际的代码部分针对每一种特性做出说明. 一.封装 顾名思义,封装即把我们想要的内容封装到某个地方,因此在这里记录两个问题,一是如何封装.二是如何调用封装的内容. 1.封装数据 class Company:     def __init__(self, dept, leader):         self.dept = dept         self.leader = leader   

python面向对象编程 -- 封装、继承(python3.5)

面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外只暴露一些接口供类外部或子类访问,隐藏数据和操作的实现细节. 在其他面向对象语言,比如java中,属性访问控制一般有三种状态:private.protectd.public.python中没有什么东西是完全不可见的,没有任何机制可以强制性的隐藏数据.所以在python中不存在真正的只能在对象内部访问的属性.一个被大多数的pytho

Python面向对象之:三大特性:继承,封装,多态。

前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要的内容组合到?起统?进?存储和使?. 这就是封装. 2. 继承: ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认清楚?个

18.Python面向对象之:继承

一:什么面向对象的继承? 比较官方的说法就是: 继承(英语:inheritance)是面向对象软件技术当中的一个概念. 如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”, 而把B称为“A的父类别”也可以称“B是A的超类”.继承可以使得子类别 具有父类别的各种属性和方法,而不需要再次编写相同的代码.在令子 类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆 盖父类别的原有属性和方法,使其获得与父类别不同的功能.另外,为子类 别追加新的属性和方法也是常见的做法. 一般

19.Python面向对象之:三大特性:继承,封装,多态。

前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要 的内容组合到?起统?进?存储和使?. 这就是封装. 2. 继承: ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认 清楚

Python学习(七)面向对象 ——继承和多态

Python 类继承和多态 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). 我们先来定义一个class,名为Person,表示人,定义属性变量 name 及 sex (姓名和性别):定义一个方法:当sex是male时,print he:当sex 是female时,pr