笨方法学Python——习题40

之前例子讲过关于字典、列表、字符串、元组,按书中所述,其实这些已经足够写一些代码,但Python属于面向对象的编程语言,本节所讲的类,是必须要掌握的,虽然现在有些懵逼

 1 class Song(object):
 2 
 3     def __init__(self, lyrics):
 4         self.lyrics = lyrics
 5 
 6     def sing_me_a_song(self):
 7         for line in self.lyrics:
 8             print line
 9 
10 happy_bday = Song(["Happy birthday to you",
11                     "I don't want to get sued",
12                     "So I'll stop right there"])
13 
14 bulls_on_parade = Song(["They rally around the family",
15                         "With pockets full of shells"])
16 
17 happy_bday.sing_me_a_song()
18 
19 bulls_on_parade.sing_me_a_song()
 1 # -*- coding:utf-8 -*-
 2 class Ren:
 3 # 有一个(object),这是一个继承,就是继承系统的object这个类,拥有这个类的所有属性和方法,如果不需要,就不用写,写成 Ren 或者 Ren() 也可以
 4 
 5     name = ""
 6     high = "一人高"
 7     wight = "一人重"
 8     __money = "我有很多钱"
 9 # 这几个是局部属性,仅限于外部调用使用,如果通过类里的变量调用是无效的
10 # —__money 为私有属于,不能被类以外的函数调用,但如果用类里其他函数调用之后,在外部打印函数,就可以显示,这样能保证更好的封装和私密性
11     def run(self):
12         print "跑步"
13         print self.name
14         print self.__money
15 # 如果必须加self才能从内部调用属性,否则调用的是全局,也就是外部的属性,需要在外部重新定义
16 zhangsan = Ren() #这就是实例化的对象 
17 
18 # print zhangsan # <__main__.Ren instance at 0x1099edbd8>
19 # 意指张三为这个类别当中的一个实例,不能直接打印
20 
21 # if __name__ == '__main__':
22 # if __name__ == __main__    实例化对象
23 # 这句话的意思就是说如果上面的类被调用,下面的函数才会执行,而如果说整个函数作为模块被调用,则不执行!!!这里暂时没搞懂
24 
25 print zhangsan.name 
26 # 这样写就是把人这个类的整体的名称赋值给了张三,那最后的结果就是张三的名称叫“人”,肯定是不对的,所以需要通过对 name来进行重新赋值,在下方
27 
28 zhangsan.name = "张三" # 重新赋值
29 print zhangsan.name 
30 # 这个时候得到的就是张三这个人的单独名称,对于人这个类并没有影响
31 
32 # print zhangsan.money # Ren instance has no attribute 'money
33 # 由于人这个类中没有money的属性,所以打印无效果
34 zhangsan.money = "一百万"
35 print zhangsan.money 
36 # print zhangsan.__money
37 # 像这里,由于—__money是私有属性,被类中的run函数调用后,在外部打印run函数就可以,但在这里直接调用,就不可以
38 
39 # print zhangsan.__money # 私有属性,外部无法调用
40 # 对象是从类别中实例化出来的,所以会具有类的一些特性,但张三在这里是单独的个体,人的类不可能都有钱,对象与类不同,所以也可以单独赋值
41 
42 zhangsan.run()
43 
44 print Ren.__dict__ # 这个就是内置属性的调用了

描述及方法,类似球的形状,球的玩法

 

比如汽车,如果用面向对象的方式解释,

我想你带我去哪哪,直接开车去就可以了

而如果用面向过程的编程方法,就需要把打开车门、插入车钥匙,打火等等全部描述一遍

这里使用面向对象的方式把对于“汽车”的描述及方法封装为类,直接使用即可

 

比如你定义了四个函数,都是针对于数据库的操作一类功能,就可以把他们定义为一个类,最主要的作用,就是封装代码

 

 

 

面向对向的三大特色:封装、继承、多态

1,用class定义类

2,类名首字母大写,如果类名为两个词组,那这两个连续的词组首字母均需要大写

3,一般函数定义都是定义单独或者说简单功能的,比如定义人这个类,人会说话会走路,长的高、瘦,这些对于人类的描述以及人能够做的行为,可以定义为一个类,把需要用到的变量和函数放到一起的操作,叫封装

4,self 行参,在类中定义函数必须有这个,负责传递当前类中的内置的一些属性及方法,实际上就是接收自己这个类中的参数,但其实不需要给他参数

5,从一个类别当中生成对象的过程叫做实例化,当一个对象创建好后,

 

有三个特性:对象的句柄(俗称变量的名称)、属性(成员变量)和方法(成员函数)

instance(实例),类别当中的一个实例,也就是所说的对象

 

6,类写义时会有一个(object),这是一个继承,就是继续之前系统的object这个类,如果不继续 ,就不需要写,看作是一个单独的 Ren 的类即可

 

7,类的属性分公有属性、私有属性、内置属性,

公有属性就在可以被类外部访问,也可以被内部调用的属性

私有属性样式为 __x 可以被内部调用,外部无法直接调用。

内置属性样式为 __x__ 就是系统内的

 

posted @ 2017-11-25 15:53  贺健龙  阅读(1584)  评论(0编辑  收藏  举报