zoukankan      html  css  js  c++  java
  • 干货分享丨Python从入门到编写POC之初识OOP和类

    Python从入门到编写POC系列文章是i春秋论坛作家「Exp1ore」表哥原创的一套完整教程,想系统学习Python技能的小伙伴,不要错过哦!

    干货分享丨Python从入门到编写POC之初识OOP和类

     

    1、初识OOP和类

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

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

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

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

    干货分享丨Python从入门到编写POC之初识OOP和类

     

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

    2、新式类与旧式类

    先看一下二者的区别,首先是旧式类,旧式类又称为经典类。

    >>> class demo1:    pass

    这样就定义了一个很简单的旧式类,将它实例化:

    >>> DEMO1 = demo1()
    >>> type(demo1)  <type 'classobj'> >>> DEMO1.__class__<class __main__.demo1 at 0x036FEDF8>>>> type(DEMO1)<type 'instance'>

    有人可能会问DEMO1.__class__是什么意思?

    DEMO1是一个instance(实例),也是一个对象,而每个对象都有一个__class__属性,用来显示它的类型,到了Python2.2以后,就有了新式类。

    >>> class DEMO2(object):    pass>>> demo2 = DEMO2()>>> demo2.__class__<class '__main__.DEMO2'>>>> type(demo2)<class '__main__.DEMO2'>

    由此,新式类与旧式类的区别:

    (1)旧式类,.__class__和type( )的类型不同,但是新式类是相同的;

    (2)新式类要在类的名字后面跟上(object),这是一个继承的类的操作,也是基本操作。

    3、定义类

    定义新式类的方法

    第一种方法:

    >>> class demo(object):    pass

    第二种方法:

    >>> __metaclass__ = type>>> class DEMO:    pass

    4、创建类

    写一个简单的例子:

    #coding = utf-8__metaclass__ = typeclass students:    def __init__(self,name):        self.name = name

    声明建立了一个名为“students”的类,用缩进表示这个类的内容,有些人也会把类里面的函数叫做“方法”。

    PS:类中的函数的参数必须包括self参数,且默认作为第一个参数,继续深入,def __init__是一个特殊的函数,叫做构造函数(初始化函数)。

    这样就意味着实例化时要给参数name提供一个值,作为类的初始化内容,同时,要通过name参数传一个值,成为类和实例的一个属性。

    >>> demo = students('BaZong')>>> print demo.nameBaZong
    干货分享丨Python从入门到编写POC之初识OOP和类

     

    这样就确定了这个类的基本属性,加深理解一下:

    # -*- coding: UTF-8 -*-__metaclass__ = typeclass students:    def __init__(self,name):        self.name = name    def Name(self):        return self.namestudent = students('MOMO')  #将它实例化name = student.Name()  #调用函数print 'This student is my goddess ------',nameprint student.name #实例的属性

    运行一下:

    干货分享丨Python从入门到编写POC之初识OOP和类

     

    为何self有时必须用,有时却不需要?

    其实,self不用非得写成self,写成其它的也可以,这只是约定俗称吧。

    总而言之:

    (2)self的名字并不是规定死的,但是最好还是按照约定是用self;

    (3)self总是指调用时的类的实例。

    5、继承

    “继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类"。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。

    在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。另外,为子类追加新的属性和方法也是常见的做法。

    先举一个简单例子:

    # -*- coding: UTF-8 -*-__metaclass__ = typeclass 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()
    干货分享丨Python从入门到编写POC之初识OOP和类

     

    这就是继承。有个小疑问,为啥是1.80m不是1.7m呢?

    因为继承了students,所以goddess这个类就有了students的所有函数(方法)和属性,但是如果有同样的名称方法(函数),那么就会显示goddess中的方法,这叫做方法重写。

  • 相关阅读:
    [POJ] 1979 Red and Black
    [Codeforces Round #192 (Div. 2)] D. Biridian Forest
    [Codeforces Round #192 (Div. 2)] B. Road Construction
    [Codeforces Round #192 (Div. 2)] A. Cakeminator
    430 vue组件命名方式: 短横线、驼峰
    429 vue脚手架
    428 webpack 使用步骤
    427 单页面应用,vue路由
    426 vue组件
    425 json-server,axios
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/13305525.html
Copyright © 2011-2022 走看看