用户
搜索
  • TA的每日心情
    奋斗
    2017-8-8 12:39
  • 签到天数: 86 天

    连续签到: 1 天

    [LV.6]常住居民II

    管理员

    i春秋最帅男神-阿甫大哥哥

    Rank: 9Rank: 9Rank: 9

    69

    主题

    2205

    帖子

    2785

    魔法币
    收听
    0
    粉丝
    61
    注册时间
    2016-2-5

    楚核心白帽i春秋签约作者白帽传说春秋游侠秦燕魏赵齐突出贡献

    阿甫哥哥 管理员 i春秋最帅男神-阿甫大哥哥 楚 核心白帽 i春秋签约作者 白帽传说 春秋游侠 秦 燕 魏 楼主
    发表于 2017-9-17 22:33:54 341530
    本文原创作者:阿甫哥哥,本文属i春秋原创奖励计划,未经许可禁止转载
    0.jpg
    系列文章专辑:
    https://bbs.ichunqiu.com/forum.php?mod=collection&action=view&ctid=96

    本系列文章讲的都是Python2
    目录:
    1x00 初识OPP和类

    1x01 新式类与旧式类

    1x02 定义类

    1x03 创建类

    1x04 继承(1)


    1x00 初识OPP和类
    面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

    面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

    而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

    在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。


    类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。


    1x01 新式类与旧式类
    咱们看看他们的区别
    这里呢,咱们先看一下旧式类
    旧式类又称为经典类
    [Python] 纯文本查看 复制代码
    >>> class demo1:
    ...     pass
    ...
    

    这样过呢,就定义了一个很简单的旧式类
    将他实例化
    [Python] 纯文本查看 复制代码
    >>> DEMO1 = demo1()

    咱们看下他们的type
    [Python] 纯文本查看 复制代码
    >>> type(demo1)   
    <type 'classobj'>  
    >>> DEMO1.__class__
    <class __main__.demo1 at 0x036FEDF8>
    >>> type(DEMO1)
    <type 'instance'>

    有人可能会问DEMO1.__class__是什么意思?
    这里呢?DEMO1是一个instance(实例),也是一个对象,而每个对象呢?都有一个__class__属性,用来显示它的类型
    然后,到了Python2.2以后,就有了新式类
    [Python] 纯文本查看 复制代码
    >>> class DEMO2(object):
    ...     pass
    ...
    >>> demo2 = DEMO2()
    >>> demo2.__class__
    <class '__main__.DEMO2'>
    >>> type(demo2)
    <class '__main__.DEMO2'>

    发现了吗,新式类与旧式类的区别
    旧式类,.__class__和type()的类型不同,但是新式类,就协调了不少,他们变成了相同的
    还有呢,就是新式类要在类的名字后面跟上(object),这是一个继承的类的操作
    别吐槽,还有这种操作?因为这是基本操作
    1x02 定义类
    这里呢,咱们说的是定义新式类的方法
    第一种方法:
    [Python] 纯文本查看 复制代码
    >>> class demo(object):
    ...     pass
    ...

    第二种方法:
    [Python] 纯文本查看 复制代码
    >>> __metaclass__ = type
    >>> class DEMO:
    ...     pass
    ...

    1x03 创建类
    这里呢,写了一个简单的栗子
    [Python] 纯文本查看 复制代码
    #coding = utf-8
     
    __metaclass__ = type
    
    class students:
        def __init__(self,name):
            self.name = name
    

    class students,这个呢?就是声明我们建立了一个名为“students”的类,用缩进表示的就是这个类的内容了
    有些人,会把类里面的函数叫做“方法”,这里呢?
    我也不多讲了,详情你自己去百度吧,反正呢?他们的本质是一样的
    ps:类中的函数的参数必须包括self参数,且默认作为第一个参数
    继续深入,def __init__是什么呢?他是一个特殊的函数,叫做构造函数(初始化函数)
    这样呢?就意味着实例化的时候,要给参数name提供一个值,作为类的初始化内容,同时,要通过name参数传一个值,成为类和实例的一个属性
    [Python] 纯文本查看 复制代码
    >>> demo = students('BaZong')
    >>> print demo.name
    BaZong

    52.jpg
    这样呢?
    咱们就确定了这个类的基本属性
    加深理解
    [Python] 纯文本查看 复制代码
    # -*- coding: UTF-8 -*-  
    
    __metaclass__ = type
    
    class students:
        def __init__(self,name):
            self.name = name
        def Name(self):
            return self.name
    
    student = students('MOMO')  #将它实例化
    name = student.Name()  #调用函数
    print 'This student is my goddess ------',name
    print student.name #实例的属性

    运行一下
    53.jpg
    有人会问,self到底是干什么的?有时必须用,有时却不需要
    其实,self不用非得写成self,写成其它的也可以,这只是约定俗称吧
    总而言之
    self在定义时需要定义,但是在调用时会自动传入。
    self的名字并不是规定死的,但是最好还是按照约定是用self
    self总是指调用时的类的实例。

    1x04 继承(1)
    “继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类"。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。另外,为子类追加新的属性和方法也是常见的做法。

    先举一个简单栗子
    [Python] 纯文本查看 复制代码
    # -*- coding: UTF-8 -*-  
    
    __metaclass__ = type
    
    class students:
        def speak(self):
            print "Hello momo"
        def height(self):
            print "MOMO's height is 1.70m"
    class goddess(students):
        def height(self):
            print "MOMO's height is 1.80m"
    
    if __name__ == '__main__':
        demo = goddess()
        demo.height()
        demo.speak()

    54.jpg
    这就是继承
    你是不是很好奇,为啥是1.80不是1.7m呢?
    因为继承了students,所以goddess这个类就有了students的所有函数(方法)和属性,但是呢,如果有同样的名称方法(函数),那么就会显示goddess中的方法,这叫做方法重写

    本集完


    本帖被以下淘专辑推荐:

    Time will give me the answer
    越学越觉得很像C++
    使用道具 举报 回复
    我都以为完结了
    使用道具 举报 回复
    发表于 2017-9-18 15:58:16

    我都以为完结了
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册