【Python】类和对象

类和对象

  • 构造方法
  • 封装
  • 继承
    • 多继承
  • 多态

类: 类是一个模板,描述一类对象的行为和状态。 有了模板我们就可以根据这个模板创建具体的对象。
对象: 对象是类的一个具体实例,有状态和行为。

class 类名称:  
    类的属性
    类的行为
# 其中 class是关键字,表示要定义类
# 类的属性,即定义在类中的变量
#  类的行为,即定义在类中的函数

例如:

# 创建Student类
class Student:
    name = None
    age = None
    # 此处self表示类对象本身,若要访问类的成员变量时,需要通过self. 
    # 例如 self.name,self在形参列表中,但是不占用具体的参数位置
    # 调用方法时可不用管,例如:stu.sayHi()
    def sayHi(self):
        print(f"Hello, 我的名字是{self.name}")

# 实例化一个 Student 对象
stu = Student()
stu.name = "张三"
stu.age = 20
stu.sayHi()

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

构造方法

当类里的属性太多时,如果再通过 对象.属性 来赋值,会略显繁琐,因此我们可以使用 构造方法 __init__() 来完成,创建对象时,会将传入的参数自动传递给构造方法使用,构造方法会自动执行。例如:

class Student:
# 使用构造方法时,类里的属性可以省略,self. 会自动定义
    name = None
    age = None
    # __init__ 两边都是两个下划线
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print("使用构造方法初始化一个对象")
    def sayHi(self):
        print(f"Hello, 我的名字是{self.name}")

stu1 = Student("张三",22)
stu1.sayHi()

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


__str()__,类似 Java 里的 toString() 方法:

在这里插入图片描述

封装

封装就是将一系列属性或方法给隐藏起来,外部对象不能直接使用,就像手机里的各种软硬件,无需知道他们如何实现,他们内部之间可能互相调用,但外部需要通过封装好的接口来使用。
用两个下划线开头,声明该方法为私有方法,属性为私有属性,只能在类的内部调用,不能在类的外部调用。例如:

class Student:
    __name = None
    __age = None # 私有变量
    sex = None  # 公有变量
    def __init__(self, name, age, sex):
        self.__name = name
        self.__age = age
        self.sex = sex
    def __say(self):
        print("Hello My name is " + self.__name)

stu1 = Student("张三",22,"男")
print(stu1.sex) # 可以访问
print(stu1.__age)   # 报错,不能访问

在这里插入图片描述

但是可以调用公有方法:

在这里插入图片描述

继承

当一个新的类和一个已有的类 功能属性 差不多时,我们就可以使用继承,如 类B 继承了 类A,那么 类B 就拥有了和 类A 一样的属性方法,类A 保持不变,这样我们就无需再重新设计 类B 了。例如各大手机厂商,大多情况下只会在上一代手机基础上增加一些新功能,而不是重新设计外表功能等。继承格式:

class 类名(父类名):
	类内容体

例如:

class Phone:
    name = "一代手机"
    def __init__(self, name):
        self.name = name
    def message(self):
        print(f"{self.name}可以发送短信")
class Xiaomi(Phone):
    def call(self):
        print(f"{self.name}可以打电话")
class Huawei(Phone):
    def call(self):
        print(f"{self.name}可以发视频")

xiaomi = Xiaomi("小米")
# 一代手机功能
xiaomi.message()
# 自己的功能
xiaomi.call()

Huawei = Huawei("华为")
Huawei.message()
Huawei.call()

在这里插入图片描述

若对父类功能不满意,也可以覆盖父类的方法:

class Phone:
    name = "一代手机"
    def __init__(self, name):
        self.name = name
    def message(self):
        print(f"{self.name} 可以发送短信")

class Phone2(Phone):
	# 重写父类方法
    def message(self):
        print(f"{self.name} 不仅可以发送短信,还可以发邮箱")

phone = Phone2("二代手机")
phone.message()

在这里插入图片描述
当然也可以两个同时使用:
在这里插入图片描述

多继承

可以继承多个类。

class 类名(父类名1,父类名2...:
	类内容体
class Phone:
    name = "一代手机"
    def __init__(self, name):
        self.name = name
    def message(self):
        print(f"{self.name} 可以发送短信")
class Computer:
    def __init__(self, name):
        self.name = name
    def office(self):
        print(f"{self.name} 可以办公")


class Pingban(Phone,Computer):
# 继承了 Phone和 Computer,所以拥有 Phone类 和 computer类的方法和属性
    def game(self):
        print(f"{self.name} 可以打游戏")

pingban = Pingban("平板")
pingban.message()
pingban.office()
pingban.game()

在这里插入图片描述

多态

多态 指的是多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。具体请看例子:

class Animal:
    def __init__(self, name):
        self.name = name
        
    def speak(self):
        pass  # 不想实现具体方法可以使用 pass关键字

    def eat(self):
        pass

class Dog(Animal):
    def speak(self):
        print(f"{self.name} 汪汪叫")

    def eat(self):
        print(f"{self.name} 吃骨头")

class Cat(Animal):
    def speak(self):
        print(f"{self.name} 喵喵叫")

    def eat(self):
        print(f"{self.name} 吃鱼肉")

def pet(animal):
    animal.speak()
    animal.eat()

cat = Cat("小猫")
dog = Dog("小狗")
pet(cat)
print("=========")
pet(dog)

在这里插入图片描述

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

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

相关文章

Python 复杂密码图形化生成工具,支持选择生成10位和12位复杂密码(初版)

代码 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2024/3/26 15:22 # Author : wyq # File : 部署测试.py import random import string from tkinter import *def generate_password(length):characters string.ascii_letters string.digits string.p…

2006-2021年各省能源消费总量数据(无缺失)

2006-2021年各省能源消费总量数据(无缺失) 1、时间:2006-2021年 2、来源:能源年鉴、各省年鉴 3、范围:30个省 4、指标:能源消费总量(万吨标煤) 5、缺失情况:无缺失 …

智能网联汽车自动驾驶数据记录系统DSSAD数据元素

目录 第一章 数据元素分级 第二章 数据元素分类 第三章 数据元素基本信息表 表1 车辆及自动驾驶数据记录系统基本信息 表2 车辆状态及动态信息 表3 自动驾驶系统运行信息 表4 行车环境信息 表5 驾驶员操作及状态信息 第一章 数据元素分级 自动驾驶数据记录系统记录的数…

设计模式-组合模式(Composite Pattern)

1. 概念 组合模式是一种结构型设计模式,它允许将对象组合成树状的层次结构,用来表示“整体-部分”的关系。 2. 原理结构图 原理图 抽象角色(Component):这是组合模式的核心,它定义了树叶和树枝构件的公…

跟TED演讲学英文:The inside story of ChatGPT‘s astonishing potential by Greg Brockman

The inside story of ChatGPT’s astonishing potential Link: https://www.ted.com/talks/greg_brockman_the_inside_story_of_chatgpt_s_astonishing_potential Speaker: Greg Brockman Date:April 2023 文章目录 The inside story of ChatGPTs astonishing potentialIntro…

第100+5步 ChatGPT文献复现:ARIMAX预测肺结核 vol. 5

基于WIN10的64位系统演示 一、写在前面 我们继续往下看,首先例行回顾文章: 《PLoS One》杂志的2023年一篇题目为《A comparative study of three models to analyze the impact of air pollutants on the number of pulmonary tuberculosis cases in …

zdpreact_antdesginpro 研究一下react里面比较流行的一个UI框架,开发后台管理系统

首先看一下最开始的代码: 这里面大部分的东西都可以删掉,比如README,只留下中文的那个就可以了。 之后看看README.md中介绍的特性。 特性 💡 TypeScript: 应用程序级 JavaScript 的语言📜 区块: 通过区块模板快速…

LeetCode 热题 100 题解(二):双指针部分(2)| 滑动窗口部分(1)

题目四:接雨水(No. 43) 题目链接:https://leetcode.cn/problems/trapping-rain-water/description/?envTypestudy-plan-v2&envIdtop-100-liked 难度:困难 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&am…

[数据概念|数据技术]智能合约如何助力数据资产变现

“ 区块链上数据具有高可信度,智能合约将区块链变得更加智能化,以支持企业场景。” 之前鼹鼠哥已经发表了一篇文章,简单介绍了区块链,那么,智能合约又是什么呢?它又是如何助力数据资产变现的呢?…

Python空间分析简明教程

数据世界是一个活生生的、会呼吸的事物。 当一个城市的犯罪率上升时,这是因为现实世界中有人在某个地方犯罪。 有警察局、住宅区和商业区、人口密度以及可以与位置相关联的人的地方。 所有这些东西都存在于数据框和表格之外的世界中。 空间分析使数据科学家能够回答…

成都百洲文化传媒有限公司靠谱吗?怎么样?

随着互联网的迅猛发展,电子商务行业迎来了前所未有的发展机遇。在这个变革的浪潮中,成都百洲文化传媒有限公司凭借其深厚的行业经验和创新的服务模式,正逐渐成为电商服务领域的新领军者。 一、创新引领,塑造电商服务新标准 成都百…

FX110网:Exness平台2024年3月交易量环比增长9%

FX110获知,多资产公司Exness 2024年3月份的客户交易量环比大幅增长9%,达到3.856万亿美元,而上个月为3.534万亿美元。 交易量激增的同时,活跃客户数量不断增加,3月份达到破纪录的836,873位交易者,超过了上个…

51单片机学习笔记——LED点亮

一、独立按键控制LED元器件和原理图 根据厂家给的原理图找到独立按键模块,观察下图我们知道按钮的一个头接GND,一头接IO口。由此可知我们如果需要使用第一个按钮则需要用p31。 二、独立按键控制LED程序 程序编写需要使用到IF else语句 当如果P310时P20…

vue快速入门(十六)事件修饰符

注释很详细&#xff0c;直接上代码 上一篇 新增内容 事件修饰符之阻止冒泡事件修饰符之阻止默认行为 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdev…

uniapp开发小程序,点击右上角<重新进入小程序>进行刷新时,设置开屏加载页面

一、需求及问题 问题&#xff1a;使用uniapp开发小程序时&#xff0c;有【学生端】和【企业端】两个入口&#xff0c;一进入小程序默认进入【学生端首页】&#xff0c;但是当前处于【企业端】时&#xff0c;点击右上角<重新进入小程序>进行刷新时&#xff0c;页面默认进…

通过 KEIL 制作 QSPI 接口的外部 Flash 下载算法

1. 引言 随着用户的应用越来越复杂以及 GUI 等需要大存储空间的需求越来越多,很多时候我们需要将代码或数据放在外扩的 Flash 存储空间。但是这样存在一个外部 Flash 烧写的问题,尤其是在应用调试时,需要将代码或数据烧录到外部 Flash。如果调试工具不能够一键烧录,势必会…

ELFK (Filebeat+ELK)日志分析系统

一. 相关介绍 Filebeat&#xff1a;轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat&#xff0c;并指定目录与日志格式&#xff0c;Filebeat 就能快速收集数据&#xff0c;并发送给 logstash 进或是直接发给 Elasticsearch 存储&#xff0c;性能上相…

(vue)el-radio鼠标移入可提示图片

(vue)el-radio鼠标移入可提示图片 效果&#xff1a; <el-form-item label"图表选择"><el-radio-group v-model"formInline.echartType"><el-tooltip v-for"(item, index) of echartTypeOptions" :key"index" placement…

Vue前端框架

1.vue基本使用1 1.vue环境搭建 一般创建vue项目是在cmd命令中用&#xff1a;vue ui 命令&#xff0c;采用ui图形界面的方式直观创建项目。 2.vue基本使用方式&#xff1a;vue组件 3.文本插值 4.属性绑定 5.事件绑定 6.双向绑定 7.条件渲染 2.vue基本使用2 1.axios 安装axios命令…

视频号小店遇到差评怎么办?怎么规避差评问题?有三种解决思路

大家好&#xff0c;我是电商花花。 我们做视频号小店的商家应该都会遇到品退、中差评这些问题&#xff0c;一个差评就可能影响到我们店铺的体验分&#xff0c;尤其是在订单不多的时候&#xff0c;一条差评很有可能让你的店铺的流量、转化率发生骤降&#xff0c;如果体验分太低…