python—面向对象详解(4-1)

举报
乂氼S 发表于 2023/05/28 13:28:50 2023/05/28
【摘要】 python—面向对象详解(4-1)

 目录

一.什么是面向对象?

1.前言

二.什么是面向对象编程(类)?

三.类的关键字class

    拓展

四.类的定义

五.类的使用

拓展

 注意事项

六.面向对象和面向过程的区别

1.面向过程编程

2.面向对象编程

3.面向过程VS面向对象

4.面向对象中常用术语

   面向过程实例

   面向对象实例 






一.什么是面向对象?

1.前言

  • 在开发中经常可以听到两句话,一句是面向函数开发意思是说,我们通过自定义开发一个函数来帮助我们实现所有的业务功能,另一句话是面向对象开发,也就是说通过自定义一个对象,并通过对象来实现所有的业务功能,过去也说过一个对象有属性有方法,但对象一词还是显得非常抽象
  • 我们可以认为实例化就是具象化,具体化的意思
  • 当我们拥有了一个类,并且类中定义了类属性和类方法的时候,通过实例化一个对象,我们就可以直接通过操作这个对象来获取类变量,以及使用类函数来帮助我们完成相关业务。
  • 类中的函数与属性一般都是为了实现一个大的功能而创建在一起的
  • 在python的类之中,同级之间的函数是可以互相调用的。但是需要注意的一点就是,两个函数之间调用时只能由一个函数去调用另一个函数,而不能相互的进行调用,否则的话会造成程序的锁的堵塞

二.什么是面向对象编程(类)?

  • 利用(面向)对象(属性和方法)去进行编码的过程
  • 自定义对象数据类型就是面向对象中的类(class)的概念
  • 编辑


三.类的关键字class

  • class来声明类,类的名称首字母大写,多单词情况下每个单词首字母大写(驼峰命名法)

    拓展

 Python应该避免使用驼峰命名,但有特例,特例就出现在类名的定义之中,类名的首字母一定要大写,也可以不用大写,但这是标准,注意类名不要使用中文,类名后面的括弧中是一个单词object,object代表Python中的一个通用对象,在类名后面可以不用加括弧以及括弧内的通用对象的,Python3.0后建议书写,书写通用对象的class会带着更多的内置功能

四.类的定义

# 示例code(在括弧后面紧接着是冒号,当看到冒号的时候就又要缩进了,
# 类也有自己的代码块,在代码块中我们可以定义类的变量,可以定义类的函数,)
class Name(object):
    attr = something
    
    def func(self):
        do
Python 2 中,对 object 的继承需要显式地写为 Name(object);而在 Python 3 中,这个继承关系是默认的。

五.类的使用

class Person(object):
    name = '小丁'
    
    def jump(self):
        print(f'{self.name} is jumping')
        

xiaoding = Person()  # 类的实例化
print(xiaoding.name)  # 通过实例化进行属性调用
xiaoding.jump()  # 通过实例化进行函数调用
  • 在实例化的过程中,Python会将self提前传入需要self函数的括弧中,所以我们在执行的时候并不需要传递,但如果没有实例化,所以Python没办法自动为我们添加self到需要的类函数中,于是就会报错(使用self只是一个规范,也可以替换为其它的字符)

拓展

  • 通常我们将代码块中第一层定义的变量(也就是类中函数体外的变量)叫类属性,如果是类函数(也称为实例方法)中定义的变量我们习惯叫它类变量。
  • 如果我们想要在类函数中调用类属性,我们就要在这个属性名前加self.就可以了,而我们函数中的self参数有两个功能1.是可以帮助我们调用类属性 2.是将我们这个函数定义到类中,所以如果我们有另一个函数,我们可以在另一个函数中,通过self.调用其他的函数来执行
  • 我们将类通过类名执行,并且将它赋予一个变量,称为将类实例化的过程,此时这个变量就是一个类的实例化的对象,我们通过实例化对象加.的形式来调用这个类的属性与函数
  • 注意!如果在函数体内定义变量,我们就要通过self.+变量名进行赋值,这样在实例化后或者在其他函数中就可以找到这个变量,不过,与函数同级别,也就是不在函数体内定义的变量,我们称作属性,这种类型的变量并不需要添加self,也可以在函数体内使用,但前提是这个函数必须要self这个参数,且位置不能错误,所以,self这个对象其实就是当前这个类的中间桥梁,通过它我们可以找到这个类的所有变量和函数,并且使用self虽然作为参数传递进去,但更多的是起到类中的各个函数变量相互调用,以及实例化对象,调用类中属性和方法的功能
  • self不放在第一个位置它就不是类函数了

 注意事项

  • 注意!!类函数中有一个默认且必传的参数self,并且一定要书写在类函数的第一个参数位这是Python内部的语法规定
  • 注意!!!在类中的属性和函数的缩进要统一

六.面向对象和面向过程的区别

1.面向过程编程

  • 面向过程编程的核心是过程,就是分析出实现
    需求所需要的步骤,通过函数一步一步实现这
    些步骤,接着依次调用即可,再简单理解就是
    程序从上到下一步步执行,从头到尾的解决问
    题。举例:假设有一辆汽车,它的速度是
    80Km/h,要从A地出发到B地,其中AB两地的距离
    是200Km。要计算这辆车从A地到B地所花费的时
    间,用面向过程实现如下:
  • 编辑




  • Python是一门面向对象编程,而面向对象编程是
    程序员发展的分水岭,尤其对很多初学者来
    说,有时会因无法理解面向对象而放弃学习编
    程,所以接下来带大家了解面向对象编程思
    想:

2.面向对象编程

  • 面向对象编程是把构成事物的整个需求按照特
    点、功能划分,将这些存在共性的部分封装成
    对象,创建对象的目的不是为了完成某一个步
    骤,而是为了描述某个事物在整个解决问题的
    步骤中的行为。
  • Python中一切皆对象,比如之前学过的变量其实
    也都是对象,包括整形(int)、浮点型
    (float)、字符串(str)、列表(list).元组
    (tule)、字典(dict)和集合(set).
  • 举例:假设有一辆汽车,它的速度是80Km/h,要
    从A地出发到B地,其中AB两地的距离是200Km.
    要计算这辆车从A地到B地所花费的时间,用面
    向对像编程实现如下:
  • 编辑







3.面向过程VS面向对象

  • 通过以上,可以看出面向过程知面向对象有以下区别:
  1. 编程思想不同
  2. 面向过程:是一种以过程为中心的编程思想。
  3. 面向对象:是一类以对象为核心的编程思想。
  4. 特点、不同
  5. 面向过程:主要分析出解决问题所需要的步骤,用函数把这些步骤一步一步实现,使用的时候一个一个依次调用即可。

4.面向对象中常用术语

  1. 类:可以理解是一个模板,通过它可以创建出无数个具体实例。比如,定义一个Cat类,通过它可以创建出无数个实例来代表各种不同特征的猫
  2. # coding:utf-8
    
    # 定义猫类
    class Cat(object):
        """类的属性就是类的变量"""
        color = 'black'
        weight = '2kg'
        kind = 'bosimao'
        age = 3
        
        # 定义方法
        def eat(self):
            print('我喜欢吃鱼')
        
        def action(self):
            print('我喜欢抓老鼠')
            
        def sleep(self):
            print('我要睡觉了')
            
            
    cat = Cat()  # 类的实例化也就是创建一个对象
    cat.eat()  # 调用类里面的方法
    cat.sleep()


  3. 对象:类并不能直接使用,通过类创建出的实例(又称对象)才能使用,比如以上创建类对象cat。
  4. 属性:类中的所有变量称为属性。比如以上案例中类的变量有颜色color、体重weight、种类Kind、年龄age
  5. 方法:类中的所有函数通常称为方法。不过,和函数所有不同的是,类方法至少要包含
    一个self参数,类方法无法单独使用,只能和类的对象一起使用,比如以上案例中的方法有eat()、action()、sleep(),创建对象后就可以直接调用类中的方法和属性。
  6. 面向对象最重要的概念就是类和实例,要牢记类是抽象的模板,而实例是根据类创建出来的
    一个个具体的“对象”,每个对象都拥有相同的方法。

   面向过程实例

  •       编辑


      



  •   编辑



   面向对象实例 

  • 面向对象:核心就是对象,对象就是将程序整合,对象是容器用来盛放数据与功能,优点:可扩展性强,缺点:编程复杂程度高,容易出现过度设计
  • 程序 = 数据 + 功能
  • 类:类即类别/种类,是面向对象分析和设计的基石,如果多个对象有相以的数据与功能,那么该多个对象就属于同一种类。有了类的好处是:我们可以把同一类对象相同的数据与功能存放到类里,而无需每个对象都重复存一份,这样每个对象里只需存自己独有的数据即可,极大地节省了空间。所以,如果说对象是用来存放数据与功能的容器,那么类则是用来存放多个对象相同的数据与功能的容器。
  • 在程序中,必须要事先定义类,然后再调用类产生对象(调用类拿到的返回值就是对象)。产生对象的类与对象之间存在关联,这种关联指的是:对象可以访问到类中共有的数据与功能,所以类中的内容仍然是属于对象的,类只不过是一种节省空间、减少代码冗余的机制,面向对象编程最终的核心仍然是去使用对象。
  • 先定义类,后调用类产生对象(调用类的过程又称为实例化)
  • 编辑






  案例展示: 

class Student:
    def __init__(self, x, y, z):
        self.name = x
        self.age = y
        self.gender = z


print(Student.__dict__)  # 类有两种属性:数据属性和函数属性
print('------------------------------')
obj = Student("小明", 18, "男")
print(obj.__dict__)
print(obj.name, obj.age, obj.gender)
print('------------------------------')
obj1 = Student("小红", 17, "女")
print(obj1.name, obj1.age, obj1.gender)


  输出: 

{'__module__': '__main__', '__init__': <function Student.__init__ at 0x000001F34F678360>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
------------------------------
{'name': '小明', 'age': 18, 'gender': '男'}
小明 18 男
------------------------------
小红 17 女

进程已结束,退出代码0
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。