python自动化学习笔记之DAY7

一、面向对象(初级)

面向过程的程序设计:核心是过程,是精心设计好的一条流水线,先干什么,在干什么,主要是解决问题的步骤,把复杂度的问题流程化,进而简单化,但是这种流水线,扩展性极差,稍微修改,就会牵动全身。

这种可以用于很少改变的场景,例如:Linux内核,Apache HTTP Server等

 

 面向对象的程序设计:核心是对象,对象是特征与技能的结合体,基于面向对象设计程序就好比在创造一个世界,你就是这个世界的上帝,存在的皆为对象,不存在的也可以创造出来,与面向过程机械式的思维方式形成鲜明对比,面向对象更加注重对现实世界的模拟,是一种“上帝式”的思维方式。这种程序扩展性强,对某一个对象单独修改,会立刻反应到整个体系中,但是这种编程复杂度高,对最终出现的问题无法准确的预测到

这种可以用于需求经常变换的软件,一般需求的变化都集中在用户层,互联网应用,游戏等等

 

1、类与对象

类即类别,种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体

在程序中,需要先定义(类),后使用(对象)

a、在程序中特征用变量标识,技能用函数标识

b、类中最常见的是:变量和函数定义

程序中的类

class OldboyStudent:

  school='oldboy'

  def learning(self)

    print('is learning')

<注意>

a、类中可以有人要python代码,这些代码在类定义阶段便会执行

b、会产生新的名称空间,用来存放类的变量与函数名,可用OldboyStudent._dict_查看。

c、对于经典类来说我们可以通过该字典操作类的名称空间的名字(新式类有限制),但Python提供专门的.语法

d、点是访问属性的语法,类中定义的名字,都是类的属性

 

 程序中类的用法(专门用来访问属性,本质是_dict_)

OldboyStudent.school  查看 #等同于经典类的操作OldboyStudent._dict_['school']

OldboyStudent.school=‘OLDBOY’  修改参数 #等于经典类的操作OldboyStudent.__dict__['school']='Oldboy' 

OldboyStudent.school.x=1            新增  #   等于经典类的操作OldboyStudent.__dict__['x']=1

del  OldboyStudent.school.x    删除  # 等于经典类的操作OldboyStudent.__dict__.pop('x')

 

程序中的对象

调用类,或称为实例化,得到对象

n1=OldboyStudent()

n2=OldboyStudent()

n3=OldboyStudent()

n1、n2、n3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__

注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值
class OldboyStudent:
    ......
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    ......

n1=OldboyStudent('张三','男','25')  # 先调用类产生空对象s1,然后调用OldboyStudent.__init__(n1,’张三','男','25')

程序中对象的用法

执行_init_,n1.name=’张三',很明显也会产生对象的名称空间

类的数据熟悉是所有对象共享的,id都一样

类的函数属性是绑定给对象使用的,obj.method称为绑定方法,内存地址都不一样

id是python的实现机制,并不能真实反映内存地址,如果有内存地址,已内存地址为准

 

绑定到对象的方法特殊之处

class Student:

  def _init_(self,name,age)

  self.name=name

  self.age=age

def learn(self):

  print('%s is learning' %self.name)   #新增self.name

n1=Stundet('张三',‘男’)

类中定义的函数(没有被任何装饰器装饰的)是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数

Student.learn(n1) #张三 is learning

类中定义的函数(没有被任何装饰器装饰的),其实主要是给对象使用的,而且是绑定到对象的,虽然所有对象指向的都是相同的功能,但是绑定到不同的对象就是不同的绑定方法

强调:绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用,就会将‘谁’本身当做第一个参数传给方法,即自动传值(方法__init__也是一样的道理)

n1.learn()  #等同于Student(n1)

注意:

  绑定到对象的方法的这种自动传值的特征,决定了在类中定义的函数都要默认写一个参数self,self可以是任意名字,但是约定俗成写出self。

 

继承

继承是类与类之间的关系,主要用来解决代码重用问题

继承是一直创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类。

继承的基本形式

class ParenClass1(object):   #定义父类

  pass

class ParenClass2():

  pass

class SubClass1(ParenClass1)  #单继承,基类是ParenClass1,派生类是SubClass

  pass

class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类

  pass

print(SubClass1.__bases__)
print(SubClass2.__bases__)
print(ParentClass1.__bases__)

总结:
1 继承的功能之一:解决类与类之间的代码重复问题
2 继承是类与类之间的关系,是一种,什么是什么的关系
3 在子类派生出的新的属性,已自己的为准
4 在子类派生出的新的方法内重用父类的功能的方式:指名道姓法
OldboyPeople.__init__
 这种调用方式本身与继承是没有关系

 

组合

软件重用的重要方式除了继承之外还有另外一种方式,即:组合

组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合

 

 

 

 
 

 

posted @ 2017-08-18 00:14  糖果的海角sky  阅读(121)  评论(0)    收藏  举报