8.python面向对象基础(封装,继承,多态)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.python面向对象基础(封装,继承,多态)相关的知识,希望对你有一定的参考价值。
一、面向对象技术简介
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
实例变量:定义在方法中的变量,只作用于当前实例的类。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
二、面向对象基本使用
1)创建类:
1 2 3 4 5 6 | class Role( object ): def __init__( self ,name,role,weapon,lif_value): self .name = name self .role = role self .weapon = weapon self .lif_value = lif_value |
class是关键字,表示类
创建对象,类名称后加括号即可
__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
object是新式类 如果不加 直接是()是旧式类
如下:
1234class
Role():
def
__init(
self
,name,role):
self
.name
=
name
self
.role
=
role
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #创建类 类名是Role class Role( object ): def __init__( self ,name,role,weapon,lif_value): self .name = name self .role = role self .weapon = weapon self .lif_value = lif_value #self为特殊参数,必填 def buy_weapon( self ,weapon): print ( ‘用户%s 购买了%s‘ % ( self .name,weapon)) self .weapon = weapon def add_blood( self ,lif_value): print ( ‘用户%s 加了%s‘ % ( self .name,lif_value)) self .lif_value = lif_value #根据类创建对象P1 P1 = Role( ‘liuyao‘ , ‘aoteman‘ , ‘b11‘ , 100 ) #执行类提供的buy_weapon方法 P1.buy_weapon( "ak47" ) #执行类提供的add_blood方法 P1.add_blood( ‘100‘ ) |
三、面向对象三大特性
1、封装
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
所以,在使用面向对象的封装特性时,需要:
1)将内容封装到某处
1 2 3 4 5 6 7 8 9 10 11 12 | #创建一个类 class Role( object ): #构造方法 def __init__( self ,name,age,job,salary): self .name = name self .age = age self .job = job self .salary = salary #将变量封装到类里的name,age,job,salary里面 user1 = Role( ‘liuyao‘ , ‘21‘ , ‘IT‘ , ‘1000‘ ) user2 = Role( ‘mayun‘ , ‘22‘ , ‘IT‘ , ‘2100‘ ) |
self 是一个形式参数,当执行 user1
=
Role(
‘liuyao‘
,
‘21‘
,
‘IT‘
,
‘1000‘
)
时,self 等于user1
当执行 user2
=
Role(
‘mayun‘
,
‘22‘
,
‘IT‘
,
‘2100‘
)
时,self 等于 user2
所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name,age,job,salary 属性
2)从某处调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #创建一个类 class Role( object ): #构造方法 def __init__( self ,name,age,job,salary): self .name = name self .age = age self .job = job self .salary = salary #将变量封装到类里的name,age,job,salary里面 user1 = Role( ‘liuyao‘ , ‘21‘ , ‘IT‘ , ‘1000‘ ) user2 = Role( ‘mayun‘ , ‘22‘ , ‘IT‘ , ‘2100‘ ) #调用name print (user1.name) #调用age print (user1.age) #调用name print (user2.name) #调用age print (user2.age) |
2.继承
继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class Role( object ): ‘‘‘定义角色共有属性‘‘‘ def __init__( self ,name,blood,force): self .name = name self .boold = blood self .force = force def regist( self ,occupation): ‘‘‘初始化生命值和力量‘‘‘ print ( ‘%s:%s;生命值:%s 力值:%s‘ % (occupation, self .name, self .boold, self .force)) def role_boold( self ,ifboold): """减去生命值""" if self .boold > = 0 : self .boold - = ifboold else : return 2000 def role_force( self ,ifforce): """减去力""" if self .force > = 0 : self .force - = ifforce else : return 3000 ‘‘‘鬼剑士角色‘‘‘ class GhostKnight(Role): """鬼剑士""" occupation = ‘鬼剑士‘ def __init__( self ,name,boold,force,skill): super (GhostKnight, self ).__init__(name,boold,force) self .skill = skill self .regist(GhostKnight.occupation) def attack( self ,enemy): """ 用于发动攻击 :param enemy:敌方姓名 """ ret = fighting(GhostKnight.occupation, self .skill, self ) return ret |
以上是关于8.python面向对象基础(封装,继承,多态)的主要内容,如果未能解决你的问题,请参考以下文章