爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10076|回复: 4

[参考资料] Python基础09 面向对象的进一步拓展

[复制链接]

新浪微博达人勋

发表于 2012-6-2 17:06:10 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
原文地址,欢迎订阅
http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html

Python基础09 面向对象的进一步拓展

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


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()


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

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

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



总结:

通过self调用类属性

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

类属性和对象的性质的区别
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-2 19:58:43 | 显示全部楼层
看了代码,随便写了个

随便测试了一下对象的传递,chaoyang<-beijing<-china

个人对def 后面的(self,parameters):
            还有这里的函数
不是很熟悉,还是有点迷糊,呵呵  不过看着例子 感觉还是能顺下来,乱鸟乱鸟...

  1. class china(object):
  2.     leader='Hu'
  3.     num_of_bigriver=2
  4.     flag='five stars'
  5.     def National_anthem(self,songname,times):
  6.         print '播放',songname,times,'次'
  7. shanghai=china()
  8. print shanghai.leader
  9. print shanghai.National_anthem('义勇军进行曲',2)
  10.         

  11. class Beijing(china):
  12.     def __init__(self,poission):
  13.         self.location=poission

  14. chaoyang=Beijing('east')
  15. print chaoyang.location

  16. print Beijing.num_of_bigriver
  17. print chaoyang.leader
  18. print chaoyang.National_anthem('义勇军进行曲',2)


QQ截图20120602195824.jpg



密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-3 13:54:32 | 显示全部楼层
今天把昨天的回顾了一下
交一个作业,两个调用method方法都试了一下,请tom指正


  1. class shouji(object):
  2.     can_call=True
  3.     text_message=True
  4.     cook=False
  5.     def vivi(self,c,d):
  6.         self.salary=c+d
  7.         self.tax=c*d
  8.         return self.salary,self.tax


  9. class xiaomi(shouji):
  10.     def __init__(self,x,y):
  11.         self.value=x**2+y**2
  12.         self.v1=x
  13.         self.v2=y
  14.         self.v3=x+y
  15. jj=xiaomi(1,2)
  16. print jj.value,jj.v1,jj.v2,jj.v3
  17. print jj.vivi(2,3)



有不妥之处请tom多多批评
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-4 22:34:32 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-4 22:35:04 | 显示全部楼层
谢谢分享。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表