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编辑  收藏  举报

导航