面向基础

面向对象编程思想 OOP

什么是面向对象

面向对象是一种编程思想,是前辈们总结出的经验,指导程序员如何编写出更好的程序 ,

核心是对象,程序就是一系列对象的集合, 程序眼负责调度控制这些对象来交互着完成任务:

面向对象的三大优点

1.扩展性

2.灵活性

3.重用性

 

缺点:

1.程序的复杂度提高了

2.无法准确预知结果

 

使用场景

对扩展性要求较高的程序 ,通常是直接面向 用户的,例如:qq,微信

 

面向过程编程思想

关注的核心是过程,过程是就是一步一步的执行步骤,既先干啥在干啥

优点:逻辑清晰 , 复杂问题简单化,流程化

缺点: 扩展性差,可维护性差

使用场景:

对扩展性要求较低的程序例如:系统内核,git,计算器

 

记住:不是所有程序都要面向对象,得分析具体需求

 

类和对象

这是OOP中的最核心的两个概念

既类型,类别 ,是一种抽象概念

是一系列具备相同特征和相同行为的对象的集合

 

对象

就是具体存在的某个事物,具备自己的特征和行为

对象就是特征和技能的结合体

 

类和对象的关系

类包含一系列对象

对象属于某个类

在生活中是先有对象再有类

而在程序中是先有类才能有对象,我们必须先告诉计算机这类的对象有什么特征有什么行为

总结出一个结论:在使用面向对象编程时,第一步就是思考需要什么样的对象,对象具备什么样的特征和行为,从而根据 这些信息总结出需要的类型

 

 

 

 

创建类和对象

定义类的语法

class 类的名称:
   类中的内容 描述属性和技能
   描述属性用变量
   描述行为用函数

类名称书写规范:首先是见名知意,名称是大驼峰命名法。
驼峰就是单词首字母大写,大驼峰是第一个字母大写,小驼峰是第一个字母小写。
创建对象的语法:

class Person:
    pass
​
#创建对象 
p = Person()

  

属性的写法:

属性可以写在类中 
类中的属性,是所有对象公共的

也可以写在对象中
对象中的属性,是每个对象独特的(不一样的)


如果类中和对象中存在同样的属性,先访问对象 如果没有在访问类


练习: 描述一个老师类 需要包含 一个公共属性和 一个独特的属性 
​
class Teacher:
    school = "oldboy"
    
t1 = Teacher()
t1.name = "jack"
t1.age = 28

  

属性的增删改查

增加属性 
对象变量名称.属性名称 = 属性值

删除属性
del 对象的变量名称.属性名称

修改
对象.属性 = 新的值

查看属性  访问的是对象的所有属性
print(对象.__dict__)

访问对象的类信息
print(对象.__class__)

init方法

叫做初始化方法,本质上就是一个函数

特点1: 当实例化 对象时,会自动执行init方法

特点2:会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改

功能:用户给对象赋初始值

练习:创建一个类具备几个属性,通过初始化方法来给他设置属性

class Dog:
    def __init__(self,kind,color,age):
        self.kind = kind
        self.color = color
        self.age = age
​
d1 = Dog("二哈","黑白",1)
d1 = Dog("泰迪","棕色",2)
​
​
注意:该函数不能有任何返回值/.... 只能是None 

  

对象的精髓就是讲数据和处理数据的函数整合到一起 ,这样一来拿到一个对象就同时拿到了需要处理的数据以及处理数据的函数

 

对象的绑定方法

默认情况下类中的方法都是对象绑定方法

其特殊之处在于,

当使用对象调用该函数时会自动传入对象本身,作为第一个参数

当使用类名来调用时他就是一个普通函数,有几个参数就得传几个参数

 

练习:写一个学生类,具备一个打招呼的技能 要能输出自己的名字信息

class Student:
    
    def __init__(self,name):
        self.name = name
     
    def say_hi(self):
        print("hello my name is %s" % self.name)

  

类绑定方法

类绑定方法用@classmethod来装饰

特殊之处:不管用类还是对象调用,都会自动传入类本身,作为第一个参数

当函数逻辑需要访问对象中的数据时,绑定给对象

当函数逻辑需要访问类中的数据时,绑定给类

 

非绑定方法

或叫做静态方法,就是即不需访问类的数据,.也不需要访问对象的数据

语法:@staticmethod

不常用

 

练习:为学生类添加一个save方法 一个get方法,save是将对象存储到文件中,get是从文件中获取对象

import os
import pickle
import time


class Student:
    def __init__(self,name):
        self.name = name

    def say_hi(self):
        print('name',self.name)

    def save(self):
        with open(self.name,'wb') as f:
            pickle.dump(self,f)

    @staticmethod
    def get(name):
        with open(name,'rb') as f:
            obj = pickle.load(f)
            return obj

print(Student.__name__)

# stu = Student('rose')    
# stu.save()
# 
# stu1 = Student('jack')
# stu1.save()
# 
# obj = Student.get('rose')
# print(obj.name)
# 
# obj = Student.get('jack')
# print(obj.name)
View Code

 

 

 

posted @ 2019-07-24 20:54  Aomur  阅读(134)  评论(0编辑  收藏  举报