首页 > 编程语言 > 详细

python学习第六周之面向对象编程

时间:2019-09-06 18:29:30      阅读:89      评论:0      收藏:0      [点我收藏+]

1.面向对象简单介绍,在学习面向对象的时候,我们会学习到以下内容:

特性:class、object;封装,继承,多态

语法:属性,方法,构造函数,析构函数,私有方法,私有属性,类变量,实例变量

2.面向对象特性介绍:

(1)类:class

一个类就是对一类拥有相同属性的对象的抽象、蓝图、原型;在类中定义了这些对象都具备的属性、共同方法。

(2)object对象:一个对象就是一个类的实例化后的实例。

(3)Encapsulation 封装:

  在类中对数据的赋值、内部调用,对外部对象是透明的;使类变成容器,包含类的数据和方法。

(4)Tnheritance 继承:

  一个类可以派生出子类,在父类定义的属性、方法自动被子类继承。

(5)Polymoyphism 多态:

  同一个基类派生出不同子类,每个子类在继承同样方法名的同时对父类方法做了不同的实现。

3.通过例子来看一下opp编程

(1)我们现在来看一个关于狗吠的例子:

class Dog:
    def __init__(self,name):
        self.name = name
    def bulk(self):
        print("%s:wang wang wang!" % self.name)
d1=Dog("一")   
d2=Dog("二")
d3=Dog("三")
d1.bulk()
d2.bulk()
d3.bulk()

 (2)下面我们通过cs游戏中创建两个角色,给这两个角色赋予不同的属性和方法,使其实现不同的功能。

class Role: #Role为类名
    def __init__(self, name, role, weapon, life_value=100, money=15000):
        #构造函数
        #在实例化时做一些类的初始化的工作
        self.name = name   #self.name赋给了实例,为实例变量(静态属性),作用域就是实例本身
        self.role = role
        self.weapon = weapon
        self.life_value = life_value   
self.money = money
def shot(self): #类的方法,即功能(动态属性) print("shooting...")
def got_shot(self): print("ah...,I got shot...") def buy_gun(self, gun_name): print("%s just bought %s" % (self.name,gun_name)) r1 = Role(‘wu‘, ‘police‘,‘AK47‘) #生成一个角色,相当于Role(r1,‘Alex‘, ‘police‘,‘AK47‘)
#实例化:初始化一个类,相当于造了一个对象;把一个类变成一个具体对象的过程为实例化 r2 = Role(‘Jack‘, ‘terrorist‘, ‘B22‘) # 生成一个角色;r2又叫为Role的实例 r1.buy_gun("b51") #内部实际是Role.buy_gun(r1) 类Role中的self接受的实际是self方法

   def __init__(self):是构造函数,作用:在实例化时做一些类的初始化的工作

  在以上cs例子中,如果我们只定义了类跟方法,没有实例化、没有调用,那么类在函数中也是存在的,可以通过打印类名来验证一下

    def buy_gun(self, gun_name):
        print("%s just bought %s" % (self.name,gun_name))
print(Role)   #函数没有调用,但是在内存中是存在的

   输出结果为 <class ‘__main__.Role‘>

  实际上,r1 = Role(‘wu‘, ‘police‘,‘AK47‘)实例化时,我们将r1一起传入内存中,所以这里我们实例化时实际是r1=Role(r1,‘Alex‘, ‘police‘,‘AK47‘)

  如r1.buy_gun("b51")  ,内部实际是Role.buy_gun(r1)  ,类Role中的self接受的实际是self方法

  got_shot、buy_gun等方法使保存在类的属性中的,需要的时候调用即可。

4.实例变量与类变量

(1)我们还是以cs游戏来说明实例变量与类变量。

在构造函数中,self.name=name,为实例变量,self.name赋给了实例,为实例变量(静态属性),作用域就是实例本身;

类变量不在构造函数中,直接写在类Role下面;

def shot(self):   #类的方法,即功能(动态属性)

r2 = Role(‘Jack‘, ‘terrorist‘, ‘B22‘)      #  生成一个角色;实例化;r2又叫为Role的实例

(2)我们在类Role中定义类变量 n,并可打印

  A.没有实例化对象,类变量可以打印

class Role: #Role为类名
    n=123   #类变量
    def __init__(self, name, role, weapon, life_value=100, money=15000):
        self.name = name  
        self.role = role
        self.weapon = weapon
        self.life_value = life_value         
        self.money = money
print(Role.n)    #类的变量存在类的内存中,还没有实例化便可以打印

   B.实例化对象后,类变量仍然可打印

print(Role.n)   
r1 = Role(‘Alex‘, ‘police‘, ‘AK47‘)
print(r1.n,r1.name) 
r2 = Role(‘Jack‘, ‘terrorist‘, ‘B22‘) 
print(r2.n,r2.name) 

   C.增加与实例变量相同的类变量,name="我是类name",发现输出结果与B中一样;这时得出结论:实例化时先找实例本身,如果实例本身没有,就去类里面找,比如n,在实例变量中没有,类变量里面有,就找到了n=123。

 

python学习第六周之面向对象编程

原文:https://www.cnblogs.com/wuxiaoru/p/11474991.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!