本节内容:
面向对象简绍
类与对象
属性与方法
构造方法与析构方法
类变量与实例变量
面向的3大特征:封装、继承、多态
一、面向对象简绍
编程范式:
编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式。 两种最重要的编程范式分别是面向过程编程和面向对象编程。
面向对象:
OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。
二、类与对象
世界万物皆可分类,万物都可以归为某一类。
万物皆对象:世上没有相同的2片树叶,每一个树叶就是一个对象。
类是对一类具有相同属性与行为的抽象。
程序是对现实生活的描述。
在程序中我们描述对象,例如:我国有14亿人,那么我们需要编写14个人吗??????或者我们需要14亿RMB,那么我们需要制作一个一个制作吗?????。显而易见是不可能的。那么我们怎么做呢,我们工厂生产产品都是如何生产,“模具”我们是通过模具来生产的,所以在我们程序中我们也可以构建一个模型“模具”来帮我们实现。
在程序中对象的模型就是我们的“类”。
通过类我们可以快速的构造出许多相似的对象。
定义类的语法:
# 定义类 # 经典类 class Person: pass # 新式类 class Student(object): pass
创建对象:实例化。类的一个实例就是一个对象。
# 实例化 p = Person() p1 = Person() stu = Student()
三、属性与方法
对象:具有的不变的特征就是属性,对象具有的行为动作就是方法。
上面的这个例子我们给这个类定义了3个属性:name、age、sex
上面的代码中我们给这个类定义了一个方法:sleep
我们就可以通过对象来调用他的属性与方法:
# 实例化 # 我们的类中有3个属性那么在创建对象时我们需要传递3个参数给这个类来创建对象 p = Person("Drango War",20,'男') # 我们可以通过对象调用他的属性与方法 print(p.name) p.sleep() Drango War 睡觉
四、构造方法与析构方法
构造方法:初始化方法。我们创建对象其实就是初始化这个类。
我们创建对象,其实就是系统帮我们自动执行了初始化方法。
析构方法:
我们知道python中有他的垃圾回收,python中的垃圾回收是自动回收,那么其实析构方法,指的就是我们的对象不使用了我们就要释放,当释放的时候系统自动执行的方法,就是析构方法。
析构方法在最后执行,系统自动执行。
五、类变量与实例变量
类变量:定义在类中方法之外的变量叫实例变量。
实例变量:定义在初始化方法中的属性(变量),是实例变量。
类变量可以使用类名来调用,但是实例变量不能使用类名调用。
类变量可以使用对象调用。
类变量是所有这个类的对象共享的,实例变量只能是本实例自己使用。
六、面向对象的3大特征:封装、继承、多态
1.封装:
封装指的是隐藏我类中的属性与方法,在外部不能访问,只能在内部访问。
私有化:私有化指只能自己访问,其他地方不能访问。
封装就是私有化我们的属性与方法让外部不能访问,但是我们要提供一个供外部访问的方法来访问。
python中的私有化:给属性或者方法前置2个下划线。
这个时候你会发现我们之前还能访问的方法与属性现在不能访问了,这就是私有化。
但是他的内部是可以访问的
我们现在想访问__name需要调用name方法就可以访问了。
2.继承。
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
有些语言是单继承,一个子类只能直接继承一个父类,有的语言是支持多继承的。一般我们想多继承,都是使用多重继承来实现。继承具有传递性。
class Person(object): def __init__(self,name,age): self.name=name self.age=age pass def show(self): print("姓名:%s"%self.name) pass class Man(Person): pass m1 = Man("Drango War",20) print(m1.name) m1.show() Drango War 姓名:Drango War
子类可以扩展父类中方法,也可以扩展属性
子类可以重构父类中的方法
#!/usr/bin/env python #-*- coding:utf-8 -*- # author:Dragon war # datetime:2018/9/5 14:45 # software: PyCharm # 人 class Person(object): def __init__(self,name,age): self.name=name self.age=age pass def show(self): print("姓名:%s"%self.name) pass # 女人 class WoMan(Person): def __init__(self,name,age,birth_child): # 调用父类中的初始化方法 super(WoMan,self).__init__(name,age) self.birth_child=birth_child pass # 重构父类中方法 def show(self): # 调用父类中的方法 super(WoMan,self).show() print("姓名:%s,这个是个性感的Woman"%self.name) pass # 扩展的方法 def period(self): print("这个%s女人来例假了") pass pass # 男人 class Man(Person): # 调用父类中的初始化方法 def __init__(self,name,age,money): super(Man,self).__init__(name,age) self.money=money pass # 重构父类中方法 def show(self): print("这个男人很有money:%d"%self.money) # 扩展的方法 def go_whoring(self): print("这个:%s,花了%d,去嫖了"%(self.name,self.money)) pass w1 = WoMan('金莲',20,'孩子') print(w1.name) print(w1.birth_child) w1.show() w1.period() m1 =Man('西门庆',20,100000) print(m1.name) print(m1.money) m1.show() m1.go_whoring()
3.多态
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
#!/usr/bin/env python #-*- coding:utf-8 -*- # author:Dragon war # datetime:2018/9/5 14:45 # software: PyCharm # 人 class Person(object): def __init__(self,name,age): self.name=name self.age=age pass def show(self): print("姓名:%s"%self.name) pass # 女人 class WoMan(Person): def __init__(self,name,age,birth_child): # 调用父类中的初始化方法 super(WoMan,self).__init__(name,age) self.birth_child=birth_child pass # 重构父类中方法 def show(self): # 调用父类中的方法 super(WoMan,self).show() print("姓名:%s,这个是个性感的Woman"%self.name) pass # 扩展的方法 def period(self): print("这个%s女人来例假了") pass pass # 男人 class Man(Person): # 调用父类中的初始化方法 def __init__(self,name,age,money): super(Man,self).__init__(name,age) self.money=money pass # 重构父类中方法 def show(self): print("这个男人很有money:%d"%self.money) # 扩展的方法 def go_whoring(self): print("这个:%s,花了%d,去嫖了"%(self.name,self.money)) pass def fun(obj):#一个接口,多种形态 obj.show() pass w1 = WoMan('金莲',20,'孩子') m1 =Man('西门庆',20,100000) fun(w1) fun(m1)