面向对象初级篇

1、概述编程

  • 面向过程:根据业务逻辑从上到下写垒代码
  • 函数式:将某功能代码封装到函数中,往后便无需重复编写,仅调用函数便可
  • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

2、建立类和对象函数

面向对象编程是一种编程方式,此编程方式的落地须要使用 “类” 和 “对象” 来实现,因此,面向对象编程其实就是对 “类” 和 “对象” 的使用。spa

  类就是一个模板,模板里能够包含多个函数,函数里实现一些功能code

  对象则是根据模板建立的实例,经过实例对象能够执行类中的函数对象

  

  • class是关键字,表示类
  • 建立对象,类名称后加括号便可

  

#建立类
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 属性,在内存里相似于下图来保存。

第二步:从某处调用被封装的内容

调用被封装的内容时,有两种状况:

  • 经过对象直接调用
  • 经过self间接调用

一、经过对象直接调用被封装的内容

上图展现了对象 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
相关文章
相关标签/搜索