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是新式类 如果不加 直接是()是旧式类

    如下:

    1
    2
    3
    4
    class 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面向对象基础(封装,继承,多态)的主要内容,如果未能解决你的问题,请参考以下文章

Java基础——面向对象三大特征(继承封装多态)

Python基础(17)_面向对象程序设计(抽象类继承原理封装多态,绑定方法)

JAVA基础——面向对象三大特性:封装继承多态

1.2Java基础面向对象(类和对象概念封装继承多态)

Python基础(二十四):面向对象核心知识

Python基础(二十四):面向对象核心知识