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(实例对象本身)绑定
posted @ 2018-03-06 15:06  短毛兔  阅读(306)  评论(0编辑  收藏  举报