python基础:(七)类

目录

      • 一.创建和使用类
      • 二.使用类和实例
        • 2.1给属性指定默认值
        • 2.2修改属性的值
          • 2.2.1直接修改属性的值
          • 2.2.2通过方法修改属性的值
          • 2.2.3通过方法对属性的值进行递增
      • 三.继承
        • 3.1子类的方法__init__()
        • 3.2给子类定义属性和方法
        • 3.3重写父类的方法
      • 四.导入类
        • 4.1语法--1:
        • 4.2语法--2

前言

       python是一门优秀的面向对象编程语言。面向对象编程语言的编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。
       根据类来创建的对象称为实例化。

一.创建和使用类

类就用一个例子来进行讲解,讲解以注释的形式添加到代码中。

class Person: #关键词class 定义了一个类,类名是Persson,根据python约定,首字母大写的名称指的是类。
    """描述人的行为信息""" #文档字符串注释,描述这个类
    def __init__(self,name,age): #__init__()是一个特殊方法,有三个形参值,并且self必不可少,并且必须放在最前面
        """初始化属性name和age"""
        self.name = name #self.name 和self.age都有前缀self以self为前缀的变量可以在类中的所有方法使用(就是def xxxx使用这个变量,但是必须加前缀self)
        self.age = age #self.name和self.age 也称作属性,属性就是通过实例访问的变量

    def walk(self): #定义另一个方法,走路,
        """模拟模特收到命令时走路"""
        print(f"{self.name} is now walking!")

"""下面是使用类"""
person = Person('Mayahei',20) #python创建人的一个实例,并将这个实例赋值给变量person
print(person.name) #person此时是一个实例,我们可以通过句点法,(就是.)来访问属性
print(person.age) #同person.name

"""下面是调用类的方法,也就是def xxxx"""
person.walk() #通过实例person调用方法walk(walk就是打印模特正在走路)

运行结果
在这里插入图片描述

二.使用类和实例

2.1给属性指定默认值

就是直接在属性那调用赋值语句即可。

class Person:
    """描述人的行为信息"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
        self.height = '100cm' #给属性指定默认值

    def walk(self):
        """模拟模特收到命令时走路"""
        print(f"{self.name} is now walking!")

    def print_height(self):
        """打印模特的身高"""
        print(f"模特的身高为:{self.height}")
        

"""下面是使用类"""
person = Person('Mayahei',20)

"""下面是调用类的方法,也就是def xxxx"""
person.print_height() #调用print_height方法打印模特身高

运行结果:
在这里插入图片描述

2.2修改属性的值

修改属性值一共有三种方法,下面进行一一讲解。

2.2.1直接修改属性的值

直接修改属性值也就是赋值语句的应用,把实例和属性通过句点连接起来即可。
实例.属性值
以本文中的例子。

person.height = '200cm' #指定的默认值为100,通过修改变为200,进而通过方法打印出来。
class Person:
    """描述人的行为信息"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
        self.height = '100cm' #给属性指定默认值

    def walk(self):
        """模拟模特收到命令时走路"""
        print(f"{self.name} is now walking!")

    def print_height(self):
        """打印模特的身高"""
        print(f"模特的身高为:{self.height}")


"""下面是使用类"""
person = Person('Mayahei',20)

"""下面是调用类的方法,也就是def xxxx"""
person.height = '200cm' #指定的默认值为100,通过修改变为200,进而通过方法打印出来。
person.print_height() #调用print_height方法打印模特身高

运行结果:
在这里插入图片描述

2.2.2通过方法修改属性的值

这个方法的本质呢还是赋值语句,不过赋值语句封装在方法中,看下例:

    def update_height(self,value):#define了一个新的方法,作用就是更新属性值
        """更新属性值"""
        self.height = value
class Person:
    """描述人的行为信息"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
        self.height = '100cm' #给属性指定默认值

    def print_height(self):
        """打印模特的身高"""
        print(f"模特的身高为:{self.height}")

    def update_height(self,value):#define了一个新的方法,作用就是更新属性值
        """更新属性值"""
        self.height = value


"""下面是使用类"""
person = Person('Mayahei',20)

"""下面是调用类的方法,也就是def xxxx"""
person.update_height('300cm') #调用更新属性值的方法,
person.print_height() #调用print_height方法打印模特身高

运行结果:
在这里插入图片描述

2.2.3通过方法对属性的值进行递增

这个其实就是通过方法修改属性值的一个延伸,也就是定义方法中的xxx+=number的应用。

    def update_height(self,value):#define了一个新的方法,作用就是更新属性值
        """更新属性值"""
        self.height += value #xxx+=number
class Person:
    """描述人的行为信息"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
        self.height = 100 #给属性指定默认值

    def print_height(self):
        """打印模特的身高"""
        print(f"模特的身高为:{self.height}cm")

    def update_height(self,value):#define了一个新的方法,作用就是更新属性值
        """更新属性值"""
        self.height += value


"""下面是使用类"""
person = Person('Mayahei',20)

"""下面是调用类的方法,也就是def xxxx"""
person.update_height(300) #调用更新属性值的方法,
person.print_height() #调用print_height方法打印模特身高

运行结果:
在这里插入图片描述

三.继承

       有前端基础的同学对这个继承应该没什么难以理解的,不过大家可以仔细看,多看多敲代码没什么难的。
       编写类时,不需要重新定义,可以在已有类的基础上添加属性和方法。

3.1子类的方法__init__()
  • 父类和子类必须在同一个.py文件中
  • 父类必须在子类的前面
  • 定义子类时必须在括号内写入父类的名称
  • 子类方法__init__()接受父类实例所需的信息
  • 调用super()函数,进而使用父类中的方法

代码的注释中一一标明:

class Person: #父类
    """描述人的行为信息"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
        self.height = 100

    def print_height(self):
        """打印模特的身高"""
        print(f"模特的身高为:{self.height}cm")

class New_Person(Person): #子类,定义子类时必须在括号内写入父类的名称----Person
    """定义一个Person子类,打印体重"""
    def __init__(self,name,age): #子类方法__init__()接受父类实例所需的信息
        super().__init__(name,age) #调用super()函数,进而使用父类中的方法


"""下面是使用类"""
new_person = New_Person('Mayahei',20)
print(f"模特的名字是:{new_person.name}")

"""下面是调用类的方法,也就是def xxxx"""
new_person.print_height() #调用父类中的方法:print_height方法打印模特身高(子类中没有这个方法)

运行结果:
在这里插入图片描述

3.2给子类定义属性和方法

也就是赋值语句的应用:

		"""给子类定义属性"""
        self.weight = 100 #给属性指定默认值,
  """给子类定义方法"""
    def print_weight(self): #新建新的方法
        """打印体重"""
        print(f"模特的体重为:{self.weight}kg!")
class Person: #父类
    """描述人的行为信息"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
        self.height = 100

    def print_height(self):
        """打印模特的身高"""
        print(f"模特的身高为:{self.height}cm")

class New_Person(Person):
    """定义一个Person子类,打印体重"""
    def __init__(self,name,age):
        super().__init__(name,age)
        """给子类定义属性"""
        self.weight = 100 #给属性指定默认值

    """给子类定义方法"""
    def print_weight(self): #新建新的方法
        """打印体重"""
        print(f"模特的体重为:{self.weight}kg!")


"""下面是使用类"""
new_person = New_Person('Mayahei',20)

"""下面是调用类的方法,也就是def xxxx"""
new_person.print_weight() #调用子类中的方法:print_weight方法打印模特体重

运行结果:
在这里插入图片描述

3.3重写父类的方法
就是一个优先级的问题,在子类中创建一个和父类一样的方法,调用这个方法是,调用的是子类的方法。

在这里插入图片描述
运行结果:
在这里插入图片描述

四.导入类

可以类比导入函数学习。

首先定义一个模块,里面专门存放类,如下图所示:
在这里插入图片描述

4.1语法–1:
from 模块名 import 类名

以我的为例:

  1. 导入单个类:
from class_0 import New_Person
  1. 导入多个类:
from class_0 import New_Person, Person
  1. 导入所有类:
from class_0 import *
4.2语法–2

语法:

import 模块名 
#然后使用句点法调用方法

eg:

在这里插入图片描述

import class_0
"""下面是使用类"""
new_person = class_0.New_Person('Mayahei',20)
new_person.print_height()

运行结果:
在这里插入图片描述

ps:如果需要使用别名在导入末尾加上as就行
eg:

from class_0 import New_Person as np

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934766.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TortoiseGit的下载、安装和配置

一、TortoiseGit的简介 tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样 不同的是:git是命令行操作模式,tortoiseGit界面化操作模式,不用记git相关命令就可以直接操作,读…

Avalonia实战实例一:使用Prism创建项目,并创建窗口

文章目录 一、安装Avalonia的项目模板二、安装Prism框架三、简单更改App.axaml为Prism基类四、创建窗口一、安装Avalonia的项目模板 这里安装的是Avalonia 11.2.1,.Net 6.0 安装完成,创建Avalonia项目。 二、安装Prism框架 打开Nuget,搜索Prism: 不要安装Prism.Core: …

【Spark】Spark的两种核心Shuffle工作原理详解

Spark 的shuffle机制 一、Spark ShuffleManager 发展历程 Spark 1.1.0 之前 在 Spark 1.1.0 之前,Spark 使用 BlockStoreShuffleFetcher 来处理 Shuffle 操作。这个实现主要依赖于直接从 BlockManager 获取 Shuffle 数据,并通过网络进行交换。 Spark …

Y3编辑器文档4:触发器1(对话、装备、特效、行为树、排行榜、不同步问题)

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 函数库与触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…

Scala递归中求汉罗塔游戏的步骤

记:f(n,"A","B","C")表示n个盘子从A柱子上移动到C柱子上,借用B柱子的过程 f(要移动的盘子的个数,起点,辅助柱子,终点) 1.基本情况(直接能求的):f(1,"A","B&…

UE5制作简单水材质

首先准备一张水材质法线贴图,也可以去 爱给网 和 花瓣网 找一张 导入后创建一个材质,如图所示 根据 Unreal 文档,吸收系数设置为红色 0.0033、绿色 0.0016、蓝色 0.0011。水看起来会更真实 然后放到一块平面上,就成功了&#xf…

【Web】2024“国城杯”网络安全挑战大赛题解

目录 Ez_Gallery 法一:shell盲注 法二:反弹shell 法三:响应钩子回显 Easy Jelly 法一:无回显XXE 法二:Jexl表达式RCE signal 法一:SSRF 法二:filterchain RCE Ez_Gallery 用这个bp验证…

【Rust 学习笔记】Rust 基础数据类型介绍——数组、向量和切片

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 Rust 基础数据类型介绍——数组、向量和切片一、数组、向量和…

【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

BGP路由优选

BGP是一个应用广泛的边界网关路由协议,定义了多种路径属性,拥有丰富的路由策略工具 BGP路由的各种属性的操作会影响路由的优选,从而对网络流量产生影响,BGP路由的优选规则十分重要 BGP路由优选的规则 当到达同一个目的网段存在…

路径规划之启发式算法之十四:蜘蛛蜂优化算法(Spider Wasp Optimizer, SWO)

蜘蛛蜂优化算法(Spider Wasp Optimizer, SWO)是一种受自然界中蜘蛛蜂行为启发的元启发式智能优化算法。由Mohamed Abdel-Basset等人于2023年提出,算法模拟了雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有独特的更新策略,适用于具有不同探索和开发需求的广泛优化问题。 一、算法背…

在 Ansys Q3D 中求解直流和交流电感

提取电缆的电感对于确保电气和电子系统的性能和可靠性至关重要。本篇博客文章将介绍使用 Ansys Q3D 求解直流和交流电感的过程。 概述 在这个例子中,我们将考虑一个由两组电缆组成的简单几何:正极和负极,如下所示: 可以使用“自…

算法日记 47 day 最小生成树(prim,kruskal)

今天主要是针对最小生成树的两种算法。 用题目来举例 题目:寻宝 53. 寻宝(第七期模拟笔试) (kamacoder.com) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这…

三、nginx实现lnmp+discuz论坛

lnmp l:linux操作系统 n:nginx前端页面 m:mysql数据库,账号密码,数据库等等都保存在这个数据库里面 p:php——nginx擅长处理的是静态页面,页面登录账户,需要请求到数据库&#…

“, ”逗号分隔打印序列不显最后一个(Python)

可以if条件语句过滤,更可以’, .join()拼接序列省却循环打印。 (笔记模板由python脚本于2024年12月10日 19:03:54创建,本篇笔记适合学过Python基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Fr…

初阶2 顺序表

本章重点 线性表顺序表 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0…

破局沉寂的区块链市场:未来之路与战略思考

近年来,区块链行业经历了高速增长、泡沫破裂和市场低谷。如今,尽管技术发展仍在持续,市场热度却明显降温。无论是公链项目、去中心化金融(DeFi),还是NFT和GameFi,许多领域都陷入了创新瓶颈和用户…

leetcode-289.生命游戏-day3

时间复杂度O(Mn) public void gameOfLife(int[][] board){if(board.length 0 || board[0].length0) return;int m board.length, n board[0].length;int[] neighbor {0, 1, -1};for(int i 0; i < m; i)for(int j 0; j < n; j)if(board[i][j] % 10 1)for(int k 0…

SYN6288语音合成模块使用说明(MicroPython、STM32、Arduino)

模块介绍 SYN6288中文语音合成模块是北京宇音天下科技有限公司推出的语音合成模块。该模块通过串口接收主控传来的语音编码后&#xff0c;可自动进行自然流畅的中文语音播报。 注&#xff1a;SYN6288模块无法播报英文单词和句子&#xff0c;只能按字母播报英文 &#xff1b;而…

JS API事件流

事件流两个阶段说明 目标&#xff1a;能够说出事件流经过的2个阶段 事件流指的是事件完整执行过程的流动路径 说明&#xff1a;假设页面里有个div&#xff0c;当触发事件时&#xff0c;会经历两个阶段&#xff0c;分别是捕获阶段、冒泡阶段 简单来说&#xff1a;捕获阶段是 …