zoukankan      html  css  js  c++  java
  • 面向对象基础

    1.面向对象概念

    什么是面向对象

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

      其核心是对象,将对象作为程序的基本操作单元,程序是一系列对象的集合,程序员负责调度控制这些对象来交互的完成任务

    在面向对象中程序员的角度发生了改变,从具体的操作者变成了指挥者

    面向对象的优缺点及使用场景

      优点:提高了扩展性。当一个对象发生改变时,对其他对象是没有任何影响的

         提高了灵活性。例如游戏中,每个玩家的操作都是自由的,而不是机械般固定的!你可以买武器,也可以买护甲

         提高了重用性。一个定义好的对象可以多次重复使用

      缺点:程序的复杂度提高了

         无法准确的预知结果

      使用场景:对扩展性要求较高的程序,通常是面向用户的,比如qq,微信和一些经常更新的游戏

    面向过程的优缺点及使用场景

      优点:逻辑清晰,可以将复杂的问题流程化,进而简答化

      缺点:扩展性差,可维护性差,一旦需要修改某个功能,会影响到全局的功能

      使用场景:对扩展性要求较低的程序,如系统内核,git,计算器等一旦完成就不需要后期修改的

    注意:面向对象和面向过程并没有好坏之分,要根据具体的情况区分使用哪种

    2.类和对象的概念

    类和对线是面向对象编程(OOP)中最核心的两个概念

      类型、类别,是一系列具备相同特征和行为的对象的集合

    对象

      是具体存在的某个事物,具备具体的特征和行为,对象就是特征和技能的结合体

    类包含一系列对象,对象属于某个类

    在生活中是先有对象再有类,而在程序中是先有类再有对象

    结论:在面向对象编程时需要先考虑我们需要创建的对象的特征和行为,再根据这些特征和行为创建对象属于的类

    3.如何创建类和对象

    定义类和对象的语法

    1 # 定义类和对象的语法
    2 class 类名:  # 创建一个类
    3     内部代码,可以定义他的特征和技能(行为)
    4     特征用变量名表示
    5     技能(行为)用函数表示
    6 
    7 具体的对象名 = 类名()  # 创建一个具体的对象

    简单的创建一个类和对象

     1 # 简单的创建一个类和对象
     2 class Person:  # 这就是一个类,虽然这个类什么都没有
     3     print(123)
     4     role = 'person'  # 人的特征属性都是人
     5     def eat(self):  # 人都要吃饭,有一个吃饭的技能
     6         return 'eat'
     7 
     8 p1 = Person()  # 这就是一个对象,他是根据这个类创建出来的,创建的时候会执行类中代码
     9 print(p1.eat())  # 打印类中函数的返回值'eat'
    10 print(p1.role)  # 查看类中的属性

    4.设计属性和属性的查找顺序

    属性的设计

     1 # 设计属性
     2 class Person:  # 定义一个类
     3     age = 18  # 类的属性
     4     pass
     5 
     6 p1 = Person()  # 生成一个对象
     7 p1.name = 'sxc'  # 增加对象的属性
     8 print(p1.age)
     9 print(p1.name)
    10 
    11 p1.name = 'zzj'  # 修改属性
    12 print(p1.name)
    13 
    14 del p1.name  #删除属性
    15 
    16 print(p1.__dict__)  # 查看对象的所有属性,name的属性被删除
    17 
    18 print(p1.__class__)  # 访问对象的类的信息

    属性的查找顺序

    先从对象自己的属性找,找不到再去类中找。对象------>类------>父类

     1 # 属性的查找顺序
     2 class Person:  # 定义一个类
     3     age = 18  # 类的属性
     4     pass
     5 
     6 p1 = Person()  # 生成一个对象
     7 p1.age = 20  # 对象中的属性
     8 print(p1.age)  # 此时打印的是对象的属性
     9 
    10 del p1.age  #删除对象中的属性
    11 print(p1.age)  # 此时打印的就是类的属性了

    5.初始化方法

    什么是初始化方法

      用于为对象的属性设置初始值的函数,__init__方法

    为什么需要初始化方法

      在类的实例(对象)中,一些属性是必须存在的,就可以用初始化函数来完成,如人的姓名

    特点:当实例化对象时,会自动执行__init__方法,会自动将对象作为第一个参数传入。

    初始化对象的属性

     1 # 初始化方法
     2 class Student:
     3     def __init__(self,name,age,sex):  # 初始化方法
     4         self.name = name
     5         self.age = age
     6         self.sex = sex
     7 
     8 s1 = Student('sxc', 18, 'male')
     9 s2 = Student('zzj', 19, 'male')
    10 print(s1.name)  # 查看属性
    11 print(s2.age)

    注意:初始化函数不能有返回值,他只能返回None,不写return和只写return和return None都可以,但是一般默认不写

    6.绑定方法之对象的绑定方法

    在类中定义的函数方法默认都对象绑定方法,并且没有被任何装饰器装饰

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

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

     1 # 对象绑定方法
     2 class Student:
     3     def __init__(self,name,age,sex):  # 初始化方法
     4         self.name = name
     5         self.age = age
     6         self.sex = sex
     7 
     8     def say(self):
     9         print('我是%s,我的年龄是%s,我的性别是%s'%(self.name,self.age,self.sex))
    10 
    11 s1 = Student('sxc',18,'')
    12 s1.say()  # 对象直接调用会将本身作为参数
    13 
    14 Student.say(s1)  # 类名来调用需要传入参数

    7.绑定方法之类的绑定方法

    用classmethod装饰器装饰的方法就是类绑定方法

    特点:不管用类还是对象调用,参数的第一个必须是cls表示当前类本身,使用类名来调用,调用时会自动传入类

     1 # 类绑定方法
     2 class Student:
     3     def __init__(self,name,age,sex):  # 初始化方法
     4         self.name = name
     5         self.age = age
     6         self.sex = sex
     7 
     8     @classmethod
     9     def say(cls,self):
    10         print('我的类是%s,我是%s,我的年龄是%s,我的性别是%s'%(cls,self.name,self.age,self.sex))
    11 
    12 s1 = Student('sxc',18,'')
    13 s1.say(s1)  # 自动传入类
    14 
    15 Student.say(s1)  # 自动传入类

    8.非绑定方法(不常用)

    用staticmethod装饰器装饰的方法就叫做非绑定方法,不需访问类的数据,也不需要访问对象的数据 

     1 # 非绑定方法
     2 class Student:
     3     def __init__(self,name):  # 初始化方法
     4         self.name = name
     5 
     6     @staticmethod  # 非绑定方法
     7     def msg():
     8         print('i am a student')
     9 
    10 s1 = Student('sxc')  # 定义一个对象
    11 
    12 Student.msg()  # 类可以直接调用,不需要传参数
    13 
    14 s1.msg()  # 对象可以直接调用,不需要传参数

     20

  • 相关阅读:
    alt、title和label
    css3-transform
    word break和word wrap
    聊聊svg
    JS严格模式
    JS提前声明和定义方式
    js跨域
    IE7append新的元素自动补充完整路径
    HTML5摇一摇
    基于jQuery仿uploadify的HTML5图片上传控件jquery.html5uploader
  • 原文地址:https://www.cnblogs.com/sxchen/p/11241339.html
Copyright © 2011-2022 走看看