Python中的类

2016-10-09  本文已影响32人  Rokkia

作为一个面向对象的语言,类是少不了的。同时连带着的还有继承、多态、封装。
首先看一下类的定义:

class newClass(object):
    def __init__(self):
        print 'class init'

class:如同def一样,标记这是一个class
newClass:类名
object:这个是你的超类,可能在别的语言里叫父类,object是所有类的超类

在创建这个类的同时呢,我们还创建了一个方法
什么是方法呢
仔细看init这个方法 ,这不就是函数嘛,其实跟函数区别不大,最大的区别就是,方法的第一个参数一定是self,不写会报错的。

说完创建再来看看使用:

newC = newClass()
#打印
class init

发生了什么,为什么我创建的时候会打印了一句class init,原因在于,当你创建init这个方法的时候,在对象创建时就会自动执行这个方法,于是,打印出来class init这句话。其实在newClass()的括号中是可以传值的,但是由于我们的init方法并没有参数,所以我们就不需要传了。
需要传值的情况:

class newClass(object):
    def __init__(self,name):
        self.name = name 
        print self.name

#如果不传入name,会报错提醒你少穿一个参数
newC = newClass()
TypeError: __init__() takes exactly 2 arguments (1 given)
#正确
newC = newClass('1Ran')
#打印
1Ran

你会发现self.name,这个name是什么呢,name其实是类的属性,由于python是动态语言,所以当你有需要添加属性的时候,可以直接使用即可。

我们可以用dir(newC)来查看newC中有的所有属性,当然你同时会看到init也在里面,毕竟方法也是一种变量嘛。

说到属性,又需要说说属性的一些特点:

1.属性

属性就是最普通的,如

class newClass(object):
    def __init__(self,name):
        self.name = name 
        print self.name
#name就是一个属性,你可以在外面访问
newC = newClass('1Ran')
1Ran

newC.name
1Ran

newC.name = 'love 1Ran'

newC.name
love 1Ran
#用实例变量是可以修改的
2.私有属性
#私有属性是以__或_开头的属性
如:
class newClass(object):
    def __init__(self,name):
        self.name = name 
        print self.name
    __age = 18

这里的__age就是一个私有属性,怎样验证呢,使用一下就知道了
使用:

newC = newClass('1Ran')
newC.__age 
#直接报错,说找不到age这个属性
AttributeError: 'newClass' object has no attribute 'age'

为什么呢,因为被隐藏了。取不到值我们来赋值试一下。

newC.__age = 20

成功了,什么情况,不是被隐藏了嘛,为什么还能修改成功。因为python是动态语言,在你给newC实例赋值时相当于给这个实例绑定了一个__age变量
让我们看看下面这种情况

class newClass(object):
    def __init__(self,name):
        self.name = name 
        print self.name
    __age = 18
    #在方法中返回,虽然__age被隐藏了,但是可以在类内部使用
    def get_age(self): #self不要忘哦
        return self.__age

#使用
newC = newClass('1Ran')
1Ran
newC.get_age()
#我们可以拿到
18
#让我们做一下改变
newC.__age = 20
#看似成功了
newC.get_age()
#18岁,不是改了20嘛。这里就可以证明了,在使用self.__age 与newC.__age并不是一个
18
3.类属性

类属性是什么,就是通过类名来调用的属性...是不是有点无语
举个例子吧

class newClass(object):
    def __init__(self,name):
        self.name = name 
        print self.name
    __age = 18
    #这就是类属性哦
    score = 0

你没看错新添加的属性就是类属性,我们可以这样用:

#查看
newClass.score
0
#设置值
newClass.score = 20
#查看
newClass.score
20

有什么用呢,比如你在玩一个游戏,游戏一般有自高分喽
于是我们这样写:

class newGame(object):
     def __init__(self,name):
         self.name = name
         self.score = 0
     maxScore = 0
     #设置玩家分数
     def set_myScore(self,score):
         self.score = score
     #获取最高分
     def get_maxScore(self):
          #当玩家分数高于最高分时,更新最高分
         if newClass.maxScore < self.score:
             newClass.maxScore = self.score
         return newClass.maxScore

#我创建了一个角色,起名1Ran
me = newGame('1Ran')
#查看一下最高分
me.get_maxScore()
0
#玩过游戏后我得了10分于是我成了最高的  
me.set_myScore(10)
me.get_maxScore()
#没有问题,最高分已经更新为了10分
10
#经不住诱惑你也玩这个游戏了
you = newGame('you')
#你先查看了一下最高分
you.get_maxScore()
10
#好强的你想要成为第一,于是你玩啊玩,玩到了100分
you.set_myScore(100)
#查看一下确实是100分了
you.get_maxScore()
100
#我隔天一查发现分数太高了,于是我放弃了
me.get_maxScore()
100
#但是GM是个心机婊,默默在后天执行了一句
newGame.maxScore = 1000
于是。。。

本文只是对自己平时学习的总结,如有不对的地方,还望各位指出,一起交流学习

上一篇下一篇

猜你喜欢

热点阅读