Python3学习笔记-面向对象
一、面向对象和面向过程
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思 想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数
1、面向过程编程
角色是执行者。把一个项目按照一定的顺序,从头到尾一步步做下去。只要前面有一个步骤变了,后面的就也要变,不易维护。
2、面向对象编程
角色是指挥者。把一个项目分成一个个小部分,每一个部分负责一方面功能,最由这些部分组合而成为一个整体。面向对象的思想适合多人的分工合作。
面向对象是包含面向过程的思路的,比如定义类中的方法,每一个小方法小功能中还是面向过程的思想。
函数编程与OOP的主要区别就是OOP可以使程序更加容易扩展和易更改。
二、类和实例
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
类:一个种类,一个模型。汽车模型。一个类就是对一类拥有
对象:指具体的东西,模型造出来的东西叫做对象。
实例:实例和对象是一样的。
实例化:实例化就是造东西的这个过程。
属性:类里面的一个变量。有类变量和实例变量,类变量是类在定义的时候就有的,实例变量是在实例化的时候才产生的变量。举个例子来说明类变量与实例变量
类变量:公共的变量,每个实例都可以用。直接通过类名.xxx来进行修改,不需要实例化
以Person类为例,在Python中,定义 类是通过class关键字:
class Person(): #经典类 pass class Person1(object): #新式类
pass #类名首字母都大写 #在python3里经典类和新式类没有任何区别,均是广度优先 #python2中经典类在多继承的时候是深度优先,新式类是广度优先
class后面紧接着是类名,即Person,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
定义好了Person类,那么就可以根据Person类造出person实例
class Person: # 经典类 country='China' #类属性 def __init__(self, name): # __init__构造函数,非必须 self.name = name # 实例属性 self.nose = 2 # 鼻子 #类中定义的变量叫属性 self.face = 3 # 脸 self.head = 10 # 脑子 self.wing = 4 # 翅膀 print('开始造人。。。') def driver(self): # 类里面定义变量一定要叫self,不然会报错 print('老司机,开车非常稳') self.eat() # 调用类里面的函数 def fly(self): print('%s 在飞。。' % self.name) # 获取类里面的变量 def eat(self): print('%s 吃火锅,吃小龙虾,喝啤酒' % self.name) # 类在用到时候,首先必须实例化 fengfeng = Person('fengfeng') #实例化,fengfeng就是Person这个类的实例 #构造函数里面制定了必须传name,在实例化的时候就要把name传进去 #实例化需要变量接收,不然实例化结束,实例销毁 print(fengfeng.face)#调用实例属性 fengfeng.eat()#调用实例方法 fengfeng.fly()#调用实例方法 fengfeng.driver()
class Person: country = 'China'#类属性,公共的变量,在外面都可以用 def __init__(self,name): self.name = name,#实例属性,每个实例name不一样 # self.country = 'China'#若每个对象都会存一个一样country,比较浪费内存,变为类变量 feng = Person('小白') print(feng.name) feng.age = 18 #为实例新增实例属性 print(feng.age) feng.country = 'USA'#不会改变类变量,只影响实例里的变量 print(feng.country)#USA FF =Person('小红') print(FF.country)#China FF.country = 'Jap'#类变量直接通过类名.xxx来进行修改,不需要实例化 print(feng.country)#USA,Amy的实例化发生在修改类变量之前,所以不再改变 print(FF.country)#Jap FGF = Person('小兰') print(FGF.country)#China
注:注意到__init__
方法的第一个参数永远是self
,表示创建的实例本身,因此,在__init__
方法内部,就可以把各种属性绑定到self
,因为self
就指向创建的实例本身。有了__init__
方法,在创建实 例的时候,就不能传入空的参数了,必须传入与__init__
方法匹配的参数,但self
不需要传,Python解释器自己会把实例变量传进去
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self
,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。
posted on 2018-05-24 15:18 fengyelan2233 阅读(153) 评论(0) 编辑 收藏 举报