zoukankan      html  css  js  c++  java
  • Python面向对象

    一、面向对象编程

    面向对象是一种编程思想,Object Oriented Programming,简称OOP。把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。他让我们在分析和解决问题时,把思维和重点转向现实中的客体中来,然后通过UML工具理清这些客体之间的联系,最后用面向对象的语言实现这种客体以及客体之间的联系。它分为面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)三个大的步骤。

    面向过程编程就是分析出解决问题所需要的步骤,然后用函数一步步实现,实现的时候一个一个的依次调用。

    再Python中,一切皆对象,也可以自定义对象。

    假设我们班级学生的进行自我介绍,为了表示每个同学的个人信息,面向过程的程序可以用一个dict表示:

    xiaoming = {
        'name':'xiaoming',
        'age':20,
        'hometown':'北京'
    }
    
    xiaohua = {
        'name':'xiaohua',
        'age':21,
        'hometown':'河北'
    }
    def print_info(stu):
        print('姓名:%s,年龄:%s,家乡:%s'%(stu['name'],stu['age'],stu['hometown']))
    
    print_info(xiaoming)
    print_info(xiaohua)

    在我们显示生活中,是每一位同学进行自我介绍,而不是像我们的代码,先介绍学生信息,然后再去看介绍了谁。

    如果采用面向对象的设计思想,我们首先考虑的不是程序的执行流程,而是stu应该被视为一个对象,这个对象拥有name,age,hometown等属性。

    如果我们要进行自我介绍,首先要创建除一个学生对象,然后给对象发出一个pront_info消息,对象自己介绍自己的信息:

    class Student(object):
        def __init__(self,name,age,hometown):
            self.name = name
            self.age = age
            self.hometown = hometown
        def print_info(self):
            print('姓名:%s,年龄:%s,家乡:%s'%(self.name,self.age,self.hometown))
    xiaoming = Student('小明',20,'北京')
    xiaohua = Student('小华',22,'河北')
    xiaoming.print_info()
    xiaohua.print_info()

    二、类和对象

    什么是类:是某一类事物,不具体,是一个抽象的模板。比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

    对象(实例):具体的事物,具体的描述出来,姓名叫小明,年龄20岁。

    类和对象的分辨: 具体 和 大概、抽象。 

    在python中定义一个Student类:

    class Student(object):  #创建类的关键字:class
        pass

    创建一个类的实例(对象):

    xiaoming = Student() #通过 变量名 = 类名()

    xiaoming指向的就是一个Student实例,可以自由的给实例变量绑定一个属性,比如,给xiaoming添加一个name属性:

    class Student(object):
        pass
    
    xiaoming = Student()
    xiaoming.name = '小明'
    print(xiaoming.name)   #小明

    由于类可以起到模板的左右,所以我们可以将一些认为必须的属性强制填写进去,通过一个特殊的__init__()方法,在创建实例的时候,就把name,age,hometown等属性绑上去:

    class Student(object):
        def __init__(self,name,age,hometown):
            pass

    我们可以看到__init__()函数中有一个self参数,self表示创建的实例本身,我们就可以把各种属性绑定到self,因为self就是实例本身。xx = Student()  -->那么self就是xx。我们可以把各种属性绑定到xx。

    注意,我们在__init__()内设置了属性后,在创建实例的时候就不能传入空的参数了,必须传入__init__()方法匹配的参数,self不需要传入,python解释器会自己把实例变量传进去。

    class Student(object):
        def __init__(self,name,age,hometown):
            pass
    
    xiaoming = Student()
    #报错信息
    __init__() missing 3 required positional arguments: 'name', 'age', and 'hometown'
    class Student(object):
        def __init__(self,name,age,hometown):
            self.name = name
            self.age = age
            self.hometown = hometown
    
    xiaoming = Student('小明',21,'河北')
    print(xiaoming.name)

    __init__()函数第一个参数永远是self,除此之外,Student() 执行的时候,会自动调用__init__()方法。进行对对象初始化。

    三、创建一个对象执行的步骤

    1. stu = Student() -> 在内存中开辟一块空间,创建一个Student类的一个实例,并把引用赋值给stu
    2. 自动调用__init__(self)方法,把传入的参数和self(实例对象本身)绑定
  • 相关阅读:
    开放GIS标准OGC之路(4)之 解密Filter(摘抄)
    在WCF中使用async/await 关键字的简化的异步编程模型(译)
    WinCE仿真器设置
    oracle PL/SQL编程详解
    oracle 日期格式
    钢笔工具使用教程
    使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
    利用bitmap将图片部分颜色透明
    PS圆角图片并保留透明背景
    Script Debugger的使用
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8514419.html
Copyright © 2011-2022 走看看