python基础:(七)类

2023-05-16

目录

      • 一.创建和使用类
      • 二.使用类和实例
        • 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python基础:(七)类 的相关文章

  • Django:模拟模型上的字段

    如何将模拟对象分配给该模型上的用户字段 无论如何都要绕过 SomeModel user 必须是 User 实例 检查吗 class SomeModel models Model user models ForeignKey User 我不会
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • 将 numpy 数组写入文本文件的速度

    我需要将一个非常 高 的两列数组写入文本文件 而且速度非常慢 我发现如果我将数组改造成更宽的数组 写入速度会快得多 例如 import time import numpy as np dataMat1 np random rand 1000
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 更改 Altair 中的构面标题位置?

    如何将方面标题 在本例中为年份 移动到每个图的上方 默认值似乎位于图表的一侧 这可以轻易改变吗 import altair as alt from vega datasets import data df data seattle weat
  • 使用 scipy curve_fit 拟合噪声指数的建议?

    我正在尝试拟合通常按以下方式建模的数据 def fit eq x a b c d e return a 1 np exp x b c np exp x d e x np arange 0 100 0 001 y fit eq x 1 1 1
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • `list()` 被认为是一个函数吗?

    list显然是内置类型 https docs python org 3 library stdtypes html list在Python中 我看到底下有一条评论this https stackoverflow com a 53645813
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 是否可以将 pd.Series 分配给无序 pd.DataFrame 中的列而不映射到索引(即不重新排序值)?

    在 Pandas 中创建或分配新列时 我发现了一些意外的行为 当我对 pd DataFrame 进行过滤或排序 从而混合索引 然后从 pd Series 创建新列时 Pandas 会重新排序该系列以映射到 DataFrame 索引 例如 d
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 为什么 smtplib.SMTP().sendmail 不发送 DKIM 签名邮件

    我已经在服务器上设置了 postfix 以及 openDKIM 当我跑步时 echo Testing setup mail s Postfix test my email address 我收到电子邮件 邮件标题中有一个DKIM Signa
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows
  • Python:高精度time.sleep

    你能告诉我如何在 Win32 和 Linux 上的 Python 2 6 中获得高精度睡眠函数吗 您可以在中使用浮点数sleep http docs python org library time html time sleep 该参数可以
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐