Python面向对象入门

一.面向对象介绍

  Python从设计之初就已经是一门面向对象的语言,而在之前的学习中其实已经隐性的接触到了面向对象的部分,只是当时不知道.

  面向过程:面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.

  优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可.

  缺点:一套流水线就是为了来解决一个问题了,如果中间出现了差错那这一条流水线就得重新再开,可扩展性差

  面向对象:核心就是对象二字,对象是特征与技能的结合体,基于该思想写程序就好比在创造世界,世界是一个个对象组成的,在上帝眼里任何存在的事物都是对象,任何不存在的事物都可以造出来,就是上帝的思维方式,

  优点:解决了程序的可扩展性差的问题,对某一对象单独修改,会立即反映到整个体系中.

  缺点:可控性差,无法向面向过程的程序设计流水线事的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题.

  这里需要注意的是在python中面向对象的程序设计并不是全部,面向对象编程可以市程序的维护和扩展变得更简单,并且可以大大提高程序开发效率,另外,基于面向对象的程序可以使他人更加容易理解你的代码逻辑,从而使团队开发变得更从容.

二.类和对象

  有一句话叫做python中一切皆为对象,类型的本质就是类,所以之前的学习中无处不在使用这类

  

  从中就可以看出dict类型的本质就是类,而下面的赋值也就是实例化过程.

  所以可以说对象是特征与技能的结合体,而类则是一系列对象相同的特征与技能的结合体

  强调:

    1.对象是具体存在的事物,而类则是一个抽象的概念

    2.站在不同的角度总结出类与对象是不同的

三.类的使用

  在程序中,必须先定义类,后调用类来产生对象

  例如:

  

  类是一系列对象相同的特征(变量)与技能(函数)的结合体,即类体中最常见的就是变量与函数的定义,但其实类体中是可以存在任意代码的,这些类体会在类定义阶段立即执行,会产生一个类的名称空间,用来将类体代码执行过程中产生的名字放入名称空间.

  总结:

    1.类本质就是一个名称空间,或者说是一个用来存放变量和函数的容器

    2.类的用途之一就是当作名称空间从其内部取出名字使用

    3.类的用途之二就是调用类来产生对象

三.对象的使用

  对象的使用就是对先类的实例化.

class OldboyStudent:
    school = 'oldboy'
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def choose_course(self):
        print('choosing course')

# 调用类来产生对象
# 调用类的过程称之为类的实例化,调用类的返回值称之为类的一个对象/实例

# 调用类发生的事
# 1.会产生一个对象然后返回
a1 =OldboyStudent('小小',18,'male')
print(a1.name)
print(a1.school)
a1.choose_course()
# 简化方案一:
def func(obj,name,age,sex='male'):
    obj.name =name
    obj.age =age
    obj.sex = sex

# 简化方案二:
# 在类中定义__init__函数
def __init__(self, name, age, sex):
    self.name = name
    self.age = age
    self.sex = sex
# 总结__init__的功能:实在实例化时就为对象初始自己独有的特征
# 注意:不能有返回值
a1.text = '秀秀秀'
print(a1.__dict__)
View Code

  对于属性的查找顺序,是先从自己的名称空间找,如果没有则去所属的类中找.

class OldboyStudent:
    school = 'oldboy'
    xxx = 222
    count = 0
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

stu1 = OldboyStudent('小哥', 18, 'male')
# 1.属性查找顺序
# 先从对象自己的名称空间找,没有则去所属的类中找
stu1.xxx=111
print(stu1.xxx)
View Code

 

posted @ 2018-08-17 19:47  Yven  阅读(234)  评论(0编辑  收藏  举报