1、概述编程
2、建立类和对象函数
面向对象编程是一种编程方式,此编程方式的落地须要使用 “类” 和 “对象” 来实现,因此,面向对象编程其实就是对 “类” 和 “对象” 的使用。spa
类就是一个模板,模板里能够包含多个函数,函数里实现一些功能code
对象则是根据模板建立的实例,经过实例对象能够执行类中的函数对象
#建立类
class Dog(object): def __init__(self,name): #构造函数,构造方法 ==初始化方法 self.NAME = name def sayhi(self): #类的方法 print("hello , I am a dog. my name is", self.NAME ) def eat(self,food): print("%s is eating %s" %(self.NAME,food)) print(Dog) d = Dog("LiChang") # Dog(d,"LiChang") #实例化后产生的对象 叫 实例 , d2 = Dog("Chuang2") #根据Dog 建立对象 d.sayhi() d2.sayhi() d.eat("baozi")
总结:函数式的应用场景 --> 各个函数之间是独立且无共用的数据blog
面向对象的三大特性是指:封装、继承和多态。继承
1、封装内存
封装,顾名思义就是将内容封装到某个地方,之后再去调用被封装在某处的内容。开发
因此,在使用面向对象的封装特性时,须要:it
第一步:将内容封装到某处
self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1
当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2
因此,内容其实被封装到了对象 obj1 和 obj2 中,每一个对象中都有 name 和 age 属性,在内存里相似于下图来保存。
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种状况:
一、经过对象直接调用被封装的内容
上图展现了对象 obj1 和 obj2 在内存中保存的方式,根据保存格式能够如此调用被封装的内容:对象.属性名
class Foo: def __init__(self, name, age): self.name = name self.age = age obj1 = Foo('wupeiqi', 18) print(obj1.name) # 直接调用obj1对象的name属性 print(obj1.age) # 直接调用obj1对象的age属性 obj2 = Foo('alex', 73) print(obj2.name) # 直接调用obj2对象的name属性 print(obj2.age) # 直接调用obj2对象的age属性
二、经过self间接调用被封装的内容
执行类中的方法时,须要经过self间接调用被封装的内容
class Foo: def __init__(self, name, age): self.name = name self.age = age def detail(self): print self.name print self.age obj1 = Foo('wupeiqi', 18) obj1.detail() # Python默认会将obj1传给self参数,即:obj1.detail(obj1),因此,此时方法内部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18 obj2 = Foo('alex', 73) obj2.detail() # Python默认会将obj2传给self参数,即:obj1.detail(obj2),因此,此时方法内部的 self = obj2,即:self.name 是 alex ; self.age 是 78