阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

面向对象基础

228次阅读
没有评论

共计 3397 个字符,预计需要花费 9 分钟才能阅读完成。

一、面向对象思想简介

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

面向对象基础

  • 什么是面向过程?

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

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

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

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

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

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

  • 什么是面向对象?

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

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

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

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

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

  • 理解面向对象

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

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

    • 面向过程

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

    • 面向对象

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

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

  • 把? 关冰箱

    面向过程

面向对象基础

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

面向对象基础

  • 面向对象的特点

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

    可以将复杂的事情简单化

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

  • 完成需求时

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

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

  • 类与对象的关系

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

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

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

面向对象基础

面向对象基础

  • 面向对象的 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)

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计3397字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中