类class第二讲

上一讲我们熟悉了对象和类的基本概念。这一讲我们将进一步拓展,以便我们真正能实际运用对象和类。


1. 在方法内调用类属性(变量以及其它方法):

上一讲我们已经提到,在定义方法时,必须有self这一参数,这个参数指的是对象。由于对象拥有类的所有性质,那么我们就可以在方法内部通过self来调用类的其它属性。

class Human(object):
    laugh = 'hahahaha'
    def show_laugh(self):
        print self.laugh
    def laugh_100th(self):
        for i in range(100):
            self.show_laugh()

li_lei = Human() # 李雷
li_lei.laugh_100th()

我们这里有一个变量属性laugh,在方法show_laugh()中通过self.laugh被调用。方法show_laugh则在laugh_100th中通过self.show_laugh()被调用。

(在方法中更改类变量属性的值是危险的,这样会影响根据这个类定义的所有对象的这一属性!!)



2. __init__()方法

__init__()是一个特殊方法(special method)。Python里会有一些特殊方法,Python会以特别的方式处理它们。特殊方法的名字的特点是前后都有两个下划线。

__init__()方法的特殊在于,如果你在类中定义了这个方法,一旦你根据这个类建立对象,Python就会自动调用这个方法(这个过程也叫初始化)。(在上一讲中,我们手动调用了move()方法)

class happyBird(Bird):
    def __init__(self,more_words):
        print 'We are happy birds.',more_words

summer = happyBird('Happy,Happy!')

(Bird类的定义见上一讲)

屏幕上打印出: We are happy birds.Happy,Happy!

我们看到,尽管我们只是建立了summer对象,但__init__()方法被自动调用了。最后一行上先建立了对象,然后执行:

summer.__init__(more_words)

'Happy,Happy!' 被传递给了__init__()的参数more_words



3. 对象的性质

上一讲我们讲了变量属性和方法属性。要注意,这些属性是类的属性。所有属于一个类的对象都会共享这些属性。比如说,鸟都有羽毛,鸡都不会飞。

在一些情况下,我们需要用到对象的性质。比如说,人是一个类别,我们知道,性别是人类的一个性质,但并不是所有的人类都是男性或者所有的人类都是女性。这个性质的值会随着对象的不同而不同。(李雷是人类的一个对象,性别是男;韩美美也是人类的一个对象,性别是女)。

我们一般通过self.attribute的方法,来说明某个量是依赖于对象的性质。

class Human(object):
    def __init__(self, input_gender):
        self.gender = input_gender
    def printGender(self):
        print self.gender

li_lei = Human('male')
print li_lei.gender
li_lei.printGender()

屏幕上打印出:

male

male


首先,在初始化中,将参数input_gender赋值给对象li_lei的性质gender。(上一讲,我们已经提到,self指示的是对象, 也就是li_lei)

我们发现,li_lei拥有了属性gender。在类human的定义中,并没有这样一个变量属性。Python是在建立了li_lei这一对象之后,专门为li_lei建立的属性。我们称此为对象的性质。(也有人以类属性,对象属性来区分)。

对象的性质也可以被其它方法调用,正如我们在printGender方法中所看到的那样。



总结:

通过self调用类属性

__init__(): 在建立对象时自动执行

类属性和对象的性质的区别

posted @ 2013-04-30 23:27  唧唧歪歪sss  阅读(266)  评论(0编辑  收藏  举报