之前例子讲过关于字典、列表、字符串、元组,按书中所述,其实这些已经足够写一些代码,但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__ 就是系统内的