python中的继承原则

 继承是面向对象的重要特征之一,继承是两个类或者多个类之间的父子关系,子进程继承了父进程的所有公有实例变量和方法。继承实现了代码的重用。重用已经存在的数据和行为,减少代码的重新编写,python在类名后用一对圆括号表示继承关系, 括号中的类表示父类,如果父类定义了__init__方法,则子类必须显示地调用父类的__init__方法,如果子类需要扩展父类的行为,可以添加__init__方法的参数。

下面演示继承的实现

class Fruit:

def __init__(self, color):

self.color = color

print "fruit‘s color: %s" %self.color

def grow(self):

print "grow..."

class Apple(Fruit):                               #继承了父类

def __init__(self, color):                  #显示调用父类的__init__方法

Fruit.__init__(self, color)

print "apple‘s color: %s" % self.color

class Banana(Fruit):                              #继承了父类

def __init__(self, color):                  #显示调用父类的__init__方法

Fruit.__init__(self, color)

print "banana‘s color:%s" %s self.color

def grow(self):                             #覆盖了父类的grow方法

print "banana grow..."

if __name__ == "__main__":

apple = Apple("red")

apple.grow()

banana = Banana("yellow")

banana.grow()

输出结果:

fruit‘s color : red

apple‘s color : red

grow...

fruit‘s color : yellow

banana‘s color : yellow

banana grow...

抽象类的模拟

     抽象类是对一类事物特征和行为的抽象,抽象类由抽象方法组成,python2.5没有提供抽象类的语法,抽象类的特征是不能被实例化,但是可以通过python的NotImplementedError类来模拟抽象类,NotImplementedError类继承自python运行时错误类RuntimeError。当对抽象类进行实例化时,将抛出异常。

模拟抽象类的实现

def abstract():                                 #定义了全局函数

raise NotImplimentedError(“abstract”):

class Fruit:

def __init__(self):

if self.__class__ is Fruit:            #如果实例化的类是Fruit,则抛出异常

abstract()

print "Fruit..."

class Apple(Fruit):

def __init__(self):

Fruit.__init__(self)

print "Apple..."

if __name__ == "__main__":

apple = Apple()                                   #输出: Fruit   Apple

同样python也没有提供对接口的支持。接口是特殊的抽象类,接口没有数据成员,而是一组未实现的方法的集合。

---------------------------------------------------------------

只要涉及到面向对象,”类“是必须出现的一个代名词。

类和对象是面向对象编程的两个主要方面。创建一个新类型,而对象是这个类的实例。

类的一些概念:

包括初始化方法__init__,可以理解为构造,self,理解为this,等等在前一篇文章中介绍过,现在就学习类的继承。

继承:

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。

需要注意的地方:继承语法   class 派生类名(基类名)://...   基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。这与c#是有区别的。

何时使用继承:假如我需要定义几个类,而类与类之间有一些公共的属性和方法,这时我就可以把相同的属性和方法作为基类的成员,而特殊的方法及属性则在本类中定义,这样只需要继承基类这个动作,就可以访问到基类的属性和方法了,它提高了代码的可扩展性。

任何事情都有利有弊:继承的一个弱点就是,可能特殊的本类又有其他特殊的地方,又会定义一个类,其下也可能再定义类,这样就会造成继承的那条线越来越长,使用继承的话,任何一点小的变化也需要重新定义一个类,很容易引起类的爆炸式增长,产生一大堆有着细微不同的子类. 所以有个“多用组合少用继承”的原则,(我觉得两者一起使用才是最佳吧*^◎^*)

在python中继承中的一些特点:

1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#

2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数

3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

如果在继承元组中列了一个以上的类,那么它就被称作“多重继承” 。

实例:定义一个模块,模块里定义了一个基类:

子类:

输出:

假如在子类中不用__init__()初始化函数,那么子类会继承基类的属性,如:

输出:

时间: 2024-10-03 22:25:44

python中的继承原则的相关文章

python中的继承和多态

继承 继承的表现方式: class Animal(): pass class Cat(Animal): #animal是cat的父类,也可以说是基类 pass print(Cat.__bases__)#查看Cat的所有父类 单继承 一个类只有一个父类 狗和鸟都是动物,都拥有吃喝这两种技能,但游泳是狗的特殊技能,飞逝鸟的特殊技能,只能在本类中进行扩展 子类中独有方法如何实现 实现了子类中独有方法,那子类有独有的属性呢?我养了一个小泰迪,我给他起个名字,但是鸟就没有这个属性 class Animal

Python中的继承

super().__init__()这个方法应该是以父类的初始化方式初始化子类属性 如果子类的初始化方式和父类不同,应该是可以再重写方法来代替super进行初始化 但假若不写的话,会直接影响到继承父类属性的存在,就算接收了参数也没地方放,因为初始化无视了它 class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender #定义Student类时,只需要把额外的属性加上,例如

python中定义函数和参数的传递问题

作者:達聞西链接:https://zhuanlan.zhihu.com/p/24162430来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 5.2.4 函数.生成器和类 还是从几个例子看起: def say_hello(): print('Hello!') def greetings(x='Good morning!'): print(x) say_hello() # Hello! greetings() # Good morning! greetings("Wh

关于python中的面向对象

对于面向对象(oop)的理解 在人类的认知中,我们习惯把属性相近的东西进行归类.所以,我们写的class xxx就是一个类,描述了一组属性的集合.而我们把这组属性具体实例出来的称之为对象 比如: class Bird(object):       def __init__(self,feather,call):           self.feather=feather           self.call=call 我们定义了一个鸟的类,并且初始化函数定义了它有羽毛,可以叫.这个就是类 b

Python中的类(中)

上一篇介绍了Python中类相关的一些基本点,本文看看Python中类的继承和__slots__属性. 继承 在Python中,同时支持单继承与多继承,一般语法如下: class SubClassName(ParentClass1 [, ParentClass2, ...]): class_suite 实现继承之后,子类将继承父类的属性,也可以使用内建函数insubclass()来判断一个类是不是另一个类的子孙类: class Parent(object): ''' parent class '

Python面向对象特性 - 继承

面向对象有3大特性:继承.多态.封装,本章介绍 Python中的 继承 特性~? 什么是继承 继承是创建类的一种方式,在 Python中支持多继承,即在创建类的时候可以继承一个或者多个父类.在继承关系中,被继承的类通常称为父类(或超类,基类),新建的类则称为子类(或派生类).?继承的优势在于可以有效地重用代码,提高代码的可读性~?继承示例: class Fu_1: # 父类 pass class Fu_2: # 父类 pass class Zi_1(Fu_1): # 单继承 pass class

Python中新式类 经典类的区别(即类是否继承object)

首先什么是新式类 经典类呢: #新式类是指继承object的类 class A(obect): ........... #经典类是指没有继承object的类 class A: ........... Python中推荐大家使用新式类 1.新的肯定好哈,已经兼容经典类 2.修复了经典类中多继承出现的bug 下面我们着重说一下多继承的bug 如图: BC 为A的子类, D为BC的子类 ,A中有save方法,C对其进行了重写 在经典类中 调用D的save方法 搜索按深度优先 路径B-A-C, 执行的为

关于Python中的类普通继承与super函数继承

关于Python中的类普通继承与super函数继承 1.super只能用于新式类 2.多重继承super可以保公共父类仅被执行一次 一.首先看下普通继承的写法 二.再看看super继承的写法 参考链接:http://blog.csdn.net/lqhbupt/article/details/19631991

【 python 学习笔记 -- OOP】在实例中学习继承(inheritance)和组合(composition)

[面向对象的三大特征]: [封装(encapsulation)]: 通过抽象的类把数据和方法封装起来.实例的数据只能通过public interface(即实例的方法)来获取或操作. [优点]:1. 功能只需在一个地方定义,而不需要在很多地方重复定义 2. 保证对象内部的数据的安全性 3. 当我们想要使用一个方法的时候,我们只需要知道我们用这个方法会返回什么结果,而不需要知道内部到底做了哪些操作来实现的.  就好像我们看电视时想要换频道,只需要按几个按钮,不需要知道要怎么调频. [继承  (in