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    ...:
 5
 6 In [5]: class sub(base):
 7    ...:     pass
 8    ...:
 9
10 In [6]: x=sub()
11
12 In [7]: x.f
13 Out[7]: <bound method sub.f of <__main__.sub instance at 0x074FD7D8>>
14
15 In [8]: x.f()
16 base

成员变量,在初始化函数__init__中对成员变量赋值即可,__init__函数相当于C++及Java中的构造函数

例如:

 1 In [9]: class c():
 2    ...:     def __init__(self,name,age):
 3    ...:         self._name=name
 4    ...:         self._age=age
 5    ...:     def printinfo(self):
 6    ...:         print self._name,self._age
 7    ...:
 8
 9 In [10]: x=c(‘P‘,‘10‘)
10
11 In [11]: x.printinfo()
12 P 10

实例属性

 1 class d():
 2     def __init__(self):
 3         self._name=‘a‘
 4         self._age=10
 5     def printinfo(self):
 6         print self._name,self._age
 7
 8 #==============================================================================
 9 #   第一种方式
10 #==============================================================================
11     def get_name(self):
12         return self._name
13
14     def set_name(self,value):
15         self._name=value
16
17     name=property(fget=get_name,fset=set_name)
18
19 #==============================================================================
20 #   第一种方式
21 #==============================================================================
22     @property
23     def age(self):
24         return self._age
25
26     @age.setter
27     def age(self,value):
28         self._age=value
29
30         

测试如下:

 1 In [16]: x=d()
 2
 3 In [17]: x.printinfo()
 4 a 10
 5
 6 In [18]: x.name
 7 Out[18]: ‘a‘
 8
 9 In [19]: x.age
10 Out[19]: 10
11
12 In [20]: x.name=‘b‘
13
14 In [21]: x.name
15 Out[21]: ‘b‘
16
17 In [22]: x.age=9
18
19 In [23]: x.age
20 Out[23]: 9

虚函数性质,同名覆盖

 1 class e():
 2     def f(self):
 3         print ‘base‘
 4
 5 class f(e):
 6     def f(self):
 7         print ‘son‘
 8
 9 class g(e):
10     pass
11
12 class h():
13     def f(self,e):
14         e.f()
15
16 a=e()
17 a.f()
18 b=f()
19 b.f()
20 c=g()
21 c.f()
22 x=h()
23 x.f(a)
24 x.f(b)
25 x.f(c)

测试结果

1 base
2 son
3 base
4 base
5 son
6 base
时间: 2024-08-01 00:55:44

python 面向对象——继承与多态的相关文章

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

Java面向对象㈡ -- 继承与多态

Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆盖的概念.覆盖被用来支持多态.实际开发中Java通常继承于抽象类,实现于接口.如果不希望一个类被继承,或者一个方法被覆盖,或者一个成员变量被改变,就可以用final修饰.这里只说明两个问题:1,重载和覆盖的区别重载和覆盖的区别:重载发生在同一个类之中,重载要求函数名相同,参数不同(参数个数||参数类

Python之路-面向对象&amp;继承和多态&amp;类属性和实例属性&amp;类方法和静态方法

一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-" 什么是面向对象 面向对象就不像面向过程那样按照功能划分模块了,它所关注的是软件系统有哪些参与者,把这些参与者称为对象,找出这些软件系统的参与者也就是对象之后,分析这些对象有哪些特征.哪些行为,以及对象之间的关系,所以说面向对象的开发核心是对象 什么是类 面向对象编程的两个重要的概念:类和对象 类是

Python 面向对象特性二 多态(3-7)

接口类: 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 在Python中是没有接口的概念的(接口是在Java里的) from abc import ABCMeta,abstractmethod#调用abc模块中的抽象方法 # 接口类 : 接口类就是一个规范 接口类一般是项目设计人员写好的 class Pa

Python 面向对象继承

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

oldboy 21th day. I love Python. 面向对象之封装, 多态, 继承 三大特性

一, 主要内容: 接口类:( 只是在工作中, 书写的一种规范.) 抽象类: 用处: 在工作中, 如果你要是规定几个类, 必须有一样的方法, 你要是抽象类. 封装: 1, 将一些属性或者方法 (一些有用的信息) 放置在一个空间中. 2, 私有成员的封装:私有静态变量, 私有属性, 私有方法 特点: 在变量前+__双下划线, 并且在类外面,子类访问私有变量,私有方法 是访问不到的. 因为私有成员,在运行时, 都会变成: _类名__变量名 所以你在类的外部,或者派生类中都不可访问. 有些方法, 变量,

python 之继承和多态

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). 比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印: class Animal(object): def run(self): print('Animal is running...') 当我们需要编写Dog和Cat类时,就可以直接从Anima

面向对象-继承和多态

在这一节中,你将体会到面向对象的诸多特色. 1.单继承 class Person(Object): def __init__(self, name, age): self.name = name self.age = age def walk(self): print("%s is walking..." % self.name) def talk(self): print("%s is talking..." % self.name) # 定义子类1 py2\3都

day6面向对象--继承、多态

继承     继承:就像遗传一样,继承就是拥有父类的所有方法和属性,并且能够定义自己独特的属性和方法,对上面的类进行扩展. 可以什么都不写,直接继承父类,如下: class People(object): def __init__(self,name,age): self.name = name self.age = age def eat(self): print("%s is eating......" %self.name) def sleep(self): print(&quo