Python初识面向对象

初识面向对象

面向过程 VS 面向对象

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

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

缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而东全身

应用场景:一旦完成基本很少改变的场景,著名例子有Linux内核,git,以及Apache HTTP Server等

面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里时间存在的万物皆为对象,不存在的也可以创造出来。

面向对象的程序设计的:

优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特性和技能修改都很容易缺点:可控性查,无法向面向过程的圣墟设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏都是面向对象程序设计大显身手的好地方

**了解Python中面向对象的一些名词类、对象、实例、实例化

类:具有相同特性的一类事物对象/实例:具体的某一个事物

实例化:类--->对象的过程

类和对象

Python中一切皆为对象,类型的本质就是类。

在Python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是“类”,对象则是这一类事物中具体一个。

类的相关知识

类声明

'''
class 类名:
    '类的文档字符串'
    类体
'''

#我们创建一个类
class Data:
    pass


class Person:   #定义一个人类
    role = 'person'  #人的角色属性都是人
    def walk(self):  #人都可以走路,也就是有一个走路方法,也叫动态属性
        print("person is walking...")

 

类的两种作用:属性引用和实例化

属性引用(类名.属性)

class Person:   #定义一个人类
    role = 'person'  #人的角色属性都是人
    def walk(self):  #人都可以走路,也就是有一个走路方法
        print("person is walking...")


print(Person.role)  #查看人的role属性
print(Person.walk)  #引用人的走路方法,注意,这里不是在调用

 

实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征

 

 

实例化的过程就是类--->对象的过程

对象名 = 类型(参数)

关于self

self:在实例化时自动将对象/实例本身传给__init__的第一个参数,

类命名空间与对象、实例的命名空间

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性。

而类有两种属性:静态属性和动态属性

-静态属性就是直接在类中定义的标量

-动态属性就是定义在类中方法


其中类的数据属性是共享给所有对象的

而类的动态属性是绑定到所有对象的

创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后找不到就抛出异常。

 

1、访问对象的属性

以下列出了几个内建方法,可以用来检查或是访问对象的属性

dir([obj]):

调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。

hasattr(obj,attr):

这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值

getattr(obj,attr):

调用这个方法将返回obj中名为attr值的属性值,例如如果attr为'bar',则返回obj.bar

srtattr(obj,attr,val):

调用这个方法将给obj的名为attr的值的属性赋值为val。例如attr为'bar',则返回obj.bar

2、访问对象的元数据

当你对一个你构造的对象使用dir()时,可能会发展列表中的很多属相并不是你定义的。这些属性一般都保存了对象的元数据,比如类的__name__属性保存了类名。大部分这些属性都可以修改,不过改动它们的意义并不是很大;修改其中某些属性如function.func_code还可能导致很难发现的问题

2.0、确定对象的类型

在types模块中定义了全部的Python内置类型,结合内置方法isinstance()就可以确定对象的具体类型了。

isinstance(object,classinfo):

检查object是不是classinfo中列举出的类型,返回布尔值。classinfo可以是一个具体的类型,也可以是多个类型的元祖和列表

2.1、模块(module)

__doc__:文档字符串。如果模块没有文档,这个值是None

__name__:始终是定义时的模块名;即使你使用import .. as为它取了别名,或是赋值给了另一个变量名

__dict__:包含了模块里可用的属性名-属性的字典;也就是可以使用模块名.属性名访问的对象

__file__:包含了该模块的文件路劲。需要注意的是内建的模块没有这个属性,访问它会抛出异常!

 __bases__:父类对象的元祖;但不包含继承树更上层的其他类,比如父类的父类

 

posted @ 2017-08-10 15:38  eric_yi  阅读(207)  评论(0编辑  收藏  举报