组团学

面向对象基础

阅读 (201564)

一、面向对象思想简介

  • 软件编程就是将我们的思维转变成计算机能够识别语言的一个过程

image20200110221611335.png

  • 什么是面向过程?

    自上而下顺序执行,逐步求精

    其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;

    各模块之间的关系尽可能简单,在功能上相对独立

    每一模块内部均是由顺序、选择和循环三种基本结构组成

    其模块化实现的具体方法是使用子程序

    程序流程在写程序时就已决定

  • 什么是面向对象?

    把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象

    对同类对象抽象出其共性,形成类

    类中的大多数数据,只能用本类的方法进行处理

    类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信

    程序流程由用户在使用中决定

  • 理解面向对象

    • 面向对象是相对面向过程而言

    • 面向对象和面向过程都是一种思想

    • 面向过程

      强调的是功能行为
      关注的是解决问题需要哪些步骤

    • 面向对象

      将功能封装进对象,强调具备了功能的对象
      关注的是解决问题需要哪些对象

    • 面向对象是基于面向过程的

  • 把🐘关冰箱

    面向过程

截屏2020011022.19.20.png

面向对象:更加符合人民思考习惯的思想,从执行者变成了指挥者

截屏2020011022.19.24.png

  • 面向对象的特点

    是一种符合人们思考习惯的思想

    可以将复杂的事情简单化

    将程序员从执行者转换成了指挥者

  • 完成需求时

    a、先要去找具有所需的功能的对象来用

    b、如果该对象不存在,那么创建一个具有所需功能的对象

  • 类与对象的关系

    使用计算机语言就是不断的在描述现实生活中的事物

    Python中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义

    对象即是该类事物实实在在存在的个体

截屏2020011022.23.25.png

截屏2020011022.23.32.png

  • 面向对象的4大特性

    封装、继承、多态、抽象

二、第一个Python类

  • 设计类只关心3样东西

    • 说明

      类名:首字母大写,遵守标识符规则
      属性:遵守标识符规则
      行为(功能、方法、函数):遵守标识符规则

    • 设计类

      类名:Person
      属性:name age sex height weight
      行为:搬砖、盖房子
      
  • 创建类

    • 格式

      class 类名(父类名):
          属性&行为
      
    • 说明

      class:表明这是一个类

      类名:类的名字

      ():父类集合的开始和结束

      父类名:父类的名字,定义的类继承自父类,可以不写,默认是object。object是所有类的直接或间接父类

    • 代码

      class Person(object): pass

三、使用类实例化对象

# 类 class Person(object): pass
  • 格式

    对象名 = 类名(参数列表)

  • 说明

    参数列表:为了后面给属性进行赋值的

  • 实例化代码

    per1 = Person() print(per1) per2 = Person() print(per2)

四、访问对象的方法

  • 对象方法

    定义:如Person类中

    调用方式:通过实例对象调用

    调用格式:对象名.方法名(参数列表)

    特性:在对象方法内部可以引用类内部的任何属性和方法

    注意:定义对象方法的第一个参数必须是self,其余参数按顺序排列,调用对象方法(函数)时忽略self

    self:代表一个对象,哪个对象调用的对象方法,那么在该方法中self就代表哪个对象

  • 类方法

    定义:如Person类中

    调用方式:用类名调用(也可以使用对象调用,但是很少这么用)

    调用格式:类名.方法名(参数列表)

    特性:在类方法内部可以引用类的属性和方法

    注意:定义对象方法的第一个参数必须是cls,其余参数按顺序排列,调用类方法(函数)时忽略cls

    cls:代表当前对象的类的类名

  • 静态方法

    定义:如Person类中

    调用方式:类和实例对象均可调用

    调用格式:类名/对象名.方法名(参数列表)

    特性:无论用类调用还是用实例对象调用,都无法获取到内部的属性和方法,完全独立的一个方法

    作用:常用作工具方法

  • 代码

    class Person(object): # 定义对象方法 def run(self): print("----------------run", self) #对象方法内部调用其他对象方法 self.eat("banana") # 对象方法内部调用其他类方法 self.talk("nice") def eat(self, food): print("----------------eat", food) # 定义类方法 @classmethod def say(cls): print("----------------say", cls) # 在类方法内部调用其他类方法 cls.talk("handsome") @classmethod def talk(cls, word): print("----------------talk", word) # 定义静态方法 @staticmethod def play(): print("----------------play") # 实例化一个对象 per = Person() print(per) print(Person) # 调用对象方法 per.run() per.eat("apple") # Person.run() #报错 # Person.run(per) #类调用对象方法,需要传递一个对象,实参对象会给对象方法中的self赋值。注意帅的人基本不这么用 # 调用类方法 Person.say() Person.talk("good") # per.say() #使用实例对象调用了类方法,最好不要这么用 print("-------------------------------") per.run() Person.say() print("-------------------------------") per.play() Person.play()

五、类属性

  • 定义

    class Person(object): # 定义类属性 # 当多个类的对象的属性值需要相同时可以使用类属性 name = "lilei" age = 18 sex = "男"
  • 调用

    可以通过类调用,也可以通过对象调用

  • 使用

    # 实例化对象时,每一个对象的属性值都相同 per1 = Person() per2 = Person() #通过对象方法类属性 对象名.类属性名 print(per1.name, per1.age, per1.sex) print(per2.name, per2.age, per2.sex) # 修改对象属性值,如果对象属性不存在则变为增加对象属性 per1.name = "liudh" per2.name = "daol" print(per1.name, per2.name, Person.name)
  • 问题

    使用类创建的所有对象的属性初始值都是一样的

六、对象的初始化状态

  • 需求

    类创建的多个对象的属性的初始值是不同的

  • 定义

    class Person(object): # 类属性 country = "中国" # 构造方法:在使用类创建实例对象时自动调用,目的是初始化对象的内容 def __init__(self, name, age, sex): # 定义对象属性 # 只能对象调用 self.name = name self.age = age self.sex = sex
  • 使用

    # 创建对象时给每个对象的属性进行赋值 per1 = Person("daol", 45, "男") per2 = Person("liudh", 55, "男") print(per1.name) print(per2.name) # print(Person.name) # 类中没有name属性,且类无法调用对象属性
  • __new__方法

    说明:是一个类方法,在使用类实例化对象时,在__init__之前调用,在堆内存中开辟空间,并返回空间的首地址,该片内存空间就代表创建的对象(混沌对象)

    使用:以后是使用__new__实现单例类,否则基本不会使用

    class Person(object): # 类属性 country = "中国" def __new__(cls, *args, **kwargs): return super().__new__(cls) def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex

七、析构函数

  • 作用

    释放一些不必要的内存

  • 使用

    class Person(object): def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def __del__(self): print("-----del-----")
  • 调用:在释放对象时自动调用

    per = Person("liudh", 55, "男") # 释放对象 del per print(per) # num = 10 # #释放掉后面的内容 # del num # print(num)
需要 登录 才可以提问哦