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__
这种调用方式本身与继承是没有关系
组合
软件重用的重要方式除了继承之外还有另外一种方式,即:组合
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
浙公网安备 33010602011771号