当前位置: 首页 > news >正文

python学习笔记15 python中的类

上一篇我们介绍了python中的库 ,学习了一些常见的内置库。详细内容可点击–>python学习笔记14 python中的库,常见的内置库(random、hashlib、json、时间、os)
这一篇我们来看一下python中的类

创建一个类
	class 类的名称():def __init__(self,参数1,参数2,...):代码块1def 方法名1(参数3,参数4,...):代码块2def 方法名2(参数5,参数6,...):代码块3...#特别注意:class类中的函数,
#        必须要有一个参数,且是第一个定义,self#self: 表示当前调用该方法的对象
# 定义一个类
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
通过一个类创建一个对象
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
# 相当于创建一个Person类的对象,将对象的地址值赋值给变量p1
p1 = Person()
p1.eat()    #吃饭
p1.call('王子奇')  #打电话给王子奇
通过一个类创建多个对象
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
# 相当于创建一个Person类的对象,将对象的地址值赋值给变量p1
p1 = Person()
p1.eat()    #吃饭
p1.call('王子奇')  #打电话给王子奇
print("----------------------------")
p2 = Person() # 在内存中开辟一个新的空间
p2.eat()    #吃饭
p2.call('王俊凯')  #打电话给王俊凯
print(id(p1)==id(p2)) # False 地址值不同
给对象赋予属性
  • 类中不写,创建对象的之后,单独为该对象创建新的属性
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")p1 = Person()
p1.name = '小虎'
print(f"p1对象的姓名为:{p1.name}")p2 = Person() # 在内存中开辟一个新的空间
# print(f"p1对象的姓名为:{p2.name}") # 报错
  • 类中编写,创建对象的时候,直接就拥有了某个属性,并且可以直接赋值
class Person:def __init__(self,name):# self.name 定义一个类中的属性,叫做nameself.name = namedef eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")# 使用类名() 的方式创建对象,实际上底层调用的是类中的__init__(self)
# 若自己没写,默认一个类中有一个__init__(self),且只能有一个
p1 = Person('小虎')
print(f"p1对象的姓名为:{p1.name}")    #p1对象的姓名为:小虎p2 = Person('张三')
print(f"p2对象的姓名为:{p2.name}")    #p2对象的姓名为:张三

练习题:

手机:
属性: 品牌, 价格, 颜色
行为:打电话, 发短信

class Phone():def __init__(self,brand,price,color):self.brand=brandself.price=priceself.color=colordef call(self,name):print(f"正在打电话给{name}...")def send_message(self,name,text):print(f"给{name}发短信了,短信内容是:{text}")if __name__ == '__main__':p1=Phone('HUAWEI',9999,"宝石蓝")p1.call('王俊凯')p1.send_message('王俊凯','你什么时候开演唱会')p2=Phone('XIAOMI',5999,"钻石白")p1.call('王子奇')p1.send_message('王子奇', '和黄景瑜在拍一个剧吧')
类的继承

继承是将多个类中的相同的部分,单独提取到一个类中,这些类于单独提出来的这个类产生一个关系,这个关系,就叫做继承关系,其他类中也就拥有了相同的部分,不需要特地定义出来。

通过继承,子类拥有了父类中的成员。

class 父类:pass
class 子类(父类):pass
class Student:def __init__(self,id,name,age):self.id=idself.name=nameself.age=agedef __str__(self):return f'Student:({self.id},{self.name},{self.age})'def study(self):print(f'{self.name}在学习')def play(self):print(f'{self.name}在玩')
class PrimaryStudent(Student):pass
class HighStudent(Student):pass
stu1=PrimaryStudent('20240001','图图',8)
stu1.study()
stu1.play()
stu2=HighStudent('20240002','莉莉',15)
stu2.study()
stu2.play()

在这里插入图片描述

特别注意:

  1. 子类无法继承父类中私有的成员

    class Fu:def fun1(self):print("好好学习,天天向上!")def __fun2(self):print("这是父类中私有的成员函数__fun2")
    class Son(Fu):pass
    s1 = Son()
    s1.fun1()
    s1.__fun2()
    

    在这里插入图片描述

  2. 若子类中出现与父类的函数名以及函数参数都一样,只是实现不一样的情况,子类对象调用的是自己的函数

    class Fu:def fun1(self):print("好好学习,天天向上!")def __fun2(self):print("这是父类中私有的成员函数__fun2")def fun3(self):self.__fun2()
    class Son(Fu):def fun1(self):print("这是子类中的函数fun1")pass
    s1 = Son()
    s1.fun1()
    

    在这里插入图片描述

  3. 子类中可以定义父类中没有的成员属性

    class Fu:def __init__(self,name,age):self.name = nameself.age = age
    class Zi(Fu):def __init__(self, name, age, sid):super().__init__(name,age)self.sid = sid
    z1 = Zi('张三',18, 1001)
    print(z1.name,z1.age,z1.sid)    #张三 18 1001
    
  4. 子类继承父类的同时,可以出现父类中没有的行为

    class Fu2:def fun1(self):print("shujia")
    class Zi2(Fu2):def show(self):print("shujia666")
    # d1 = Fu2()
    # d1.fun1()
    # d1.show() #报错
    d2 = Zi2()
    d2.fun1()
    d2.show()
    

    在这里插入图片描述

  5. 子类中可以使用super()来调用父类中非私有的成员

    class Fu:def fun1(self):print("这是父类中的fun1")
    class Zi(Fu):def fun1(self):print("这是子类中的fun1")def show(self):self.fun1() # 调用的是子类中重写后的fun1函数# 调用父类中的fun1super().fun1()
    z = Zi()
    z.show()
    

    在这里插入图片描述

  6. 在python中一个类可以同时继承多个类

    class Fu:def fun1(self):print("这是父亲中的函数fun1")
    class Mather:def fun2(self):print("这是母亲中的函数fun2")
    class Son(Fu, Mather):def fun3(self):print("这是儿子自己的函数")
    s1 = Son()
    s1.fun1()
    s1.fun2()
    s1.fun3()
    

    在这里插入图片描述

    若同时继承的类中有相同的函数名,谁先写就调用谁的

    class Fu:def fun1(self):print("这是父亲中的函数fun1")def show(self):print("这是父亲中的函数show")
    class Mather:def fun2(self):print("这是母亲中的函数fun2")def show(self):print("这是母亲中的函数show")
    class Son(Mather,Fu):def fun3(self):print("这是儿子自己的函数")
    s1 = Son()
    s1.fun1()
    s1.fun2()
    s1.fun3()
    s1.show() # 调用的是母亲中的show
    

    在这里插入图片描述

多态

表示的是某一个事物在不同时刻下的不同状态

在python中默认支持多态,因为python是动态数据类型语言。

class Animal:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"name:{self.name}, age:{self.age}"def eat(self):print("吃")def sleep(self):print("睡")
#抽象
class Dog(Animal):pass
a1 = Animal('小黄',2)
a1 = Dog('小黑',3)
print(a1)   #name:小黑, age:3
抽象
from abc import abstractmethod
# from typing import override
class Animal:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"name:{self.name}, age:{self.age}"@abstractmethoddef eat(self):pass@abstractmethoddef sleep(self):passclass Dog(Animal):# @overridedef eat(self):print("🐕吃🥩")# @overridedef sleep(self):print("🐕趴着睡")# a1 = Animal('小黄',2)
a1 = Dog('小黑',3)
a1.eat()    #🐕吃🥩
a1.sleep()  #🐕趴着睡
类变量

将变量定义在类中函数外

class Demo1:
# 类变量a = 100def fun1(self):a = 10print(a)print(Demo1.a) # 通过类名直接访问
d1 = Demo1()
d1.fun1()
print(d1.a) # 也可以通过对象名进行访问

在这里插入图片描述
下一篇我们来几个关于类的练习题结束我们python的基础语法内容啦。
我们即将进入python的进阶内容,数据分析numpy、pandas、matplotlib的学习!
点赞收藏关注,一起打卡python学习吧

相关文章:

python学习笔记15 python中的类

上一篇我们介绍了python中的库 ,学习了一些常见的内置库。详细内容可点击–>python学习笔记14 python中的库,常见的内置库(random、hashlib、json、时间、os) 这一篇我们来看一下python中的类 创建一个类 class 类的名称():de…...

PMP–一、二、三模、冲刺–分类–10.沟通管理

文章目录 技巧十、沟通管理 一模10.沟通管理--1.规划沟通管理--文化意识--军事背景和非军事背景人员有文化差异5、 [单选] 项目团队由前军事和非军事小组成员组成。没有军事背景的团队成员认为前军事团队成员在他们的项目方法中过于结构化和僵化。前军事成员认为其他团队成员更…...

android-studio开发第一个项目,并在设备上调试

恭喜你成功安装并配置好了 Android Studio!下面是开发你的第一个 Android 项目并在设备上调试的详细步骤: 1. 启动 Android Studio 首先,启动 Android Studio。你可以通过以下几种方式启动: 使用桌面快捷方式(如果已…...

springboot/ssm线上教育培训办公系统Java代码web项目在线课程作业源码

springboot/ssm线上教育培训办公系统Java代码web项目在线课程作业源码 基于springboot(可改ssm)htmlvue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&…...

Spring 依赖 详解

Spring 依赖详解 在 Spring 框架中,依赖 是指一个对象(Bean)需要另一个对象(Bean)来完成其功能的情况。Spring 通过 依赖注入(Dependency Injection, DI) 和 控制反转(Inversion of…...

千益畅行,旅游卡有些什么优势?

千益畅行共享旅游卡是一种创新的旅游服务模式,旨在通过整合各类旅游资源,为用户提供一站式的旅游解决方案。这张旅游卡支持2至6人同行,涵盖了接机、酒店、用餐、大巴、导游、景区门票等服务,用户只需自行承担往返交通费用即可享受…...

Ubuntu24 cgroupv2导致rancher(k3s)启动失败的处理

方案一: 修改系统镜像为ubuntu18 方案二: 修改当前系统的cgroup版本,由v2改成v1 修改步骤: 1、查看当前cgroup版本 stat -fc %T /sys/fs/cgroup cgroup v2,输出结果为cgroup2fs cgroup v1,输出为tm…...

学习CSS第二天

学习文章目录 一.内部样式 一.内部样式 写在 html 页面内部&#xff0c;将所有的 CSS 代码提取出来&#xff0c;单独放在 <style> 标签中 语法&#xff1a; <style> h1 { color: red; font-size: 40px; } </style>注意点&#xff1a; <style> 标签理…...

2021数学分析【南昌大学】

2021 数学分析 求极限 lim ⁡ n → ∞ 1 n ( n + 1 ) ( n + 2 ) ⋯ ( n + n ) n \lim_{n \to \infty} \frac{1}{n} \sqrt [n]{(n+1)(n+2) \cdots (n+n)} n→∞lim​n1​n(n+1)(n+2)⋯(n+n) ​ lim ⁡ n → ∞ 1 n ( n + 1 ) ( n + 2 ) ⋯ ( n + n ) n = lim ⁡ n → ∞ ( n + …...

单端和差分信号的接线法

内容来源&#xff1a;【单端信号 差分信号与数据采集卡的【RSE】【 NRES】【 DIFF】 模式的连接】 此篇文章仅作笔记分享。 单端输入 单端信号指的是输入信号由一个参考端和一个信号端构成&#xff0c;参考端一般是地端&#xff0c;信号就是通过计算信号端口和地端的差值所得…...

力扣-图论-2【算法学习day.52】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

MySQL如何区分幻读和不可重复读

在MySQL中&#xff0c;幻读和不可重复读都是并发事务中可能出现的问题&#xff0c;但它们的表现和原因略有不同。 不可重复读 (Non-Repeatable Read) 不可重复读是指在同一个事务内&#xff0c;多次读取同一行数据时&#xff0c;可能会得到不同的结果。这种情况发生在一个事务…...

界面控件Syncfusion Essential Studio®现在已完全支持 .NET 9

Syncfusion Essential Studio现在完全支持 .NET 9&#xff0c;可最新版本2024 Volume 3 版本中使用&#xff01;通过此更新&#xff0c;Blazor、.NET MAUI、WPF、WinForms、WinUI和ASP.NET Core 平台中的 Syncfusion 组件以及文档处理库已准备好让您利用 .NET 9 中的最新功能。…...

openEuler安装lsb_release

lsb_release是linux下查看发行版信息用的工具 lsb_release只是一个小程序&#xff0c;它的包名并不是lsb_release lsb_release其实是红帽的一个项目&#xff0c;其名为redhat-lsb 我们的lsb_release就是其中的一部分&#xff0c;更准确的说是redhat-lsb-core 从网站&#xff1…...

统计数字字符个数

统计数字字符个数 C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入一行字符&#xff0c;统计出其中数字字符的个数。 输入 一行字符串&#xff0c;总长度不超过255。 输出 出为1行&#xff0c;输出…...

44页PDF | 信息化战略规划标准框架方法论与实施方法(限免下载)

一、前言 这份报告详细介绍了企业信息化战略规划的标准框架、方法论以及实施方法&#xff0c;强调了信息化规划应以业务战略和IT战略为驱动力&#xff0c;通过构筑企业架构&#xff08;EA&#xff09;来连接长期战略和信息化建设。报告提出了信息化规划原则&#xff0c;探讨了…...

计算机网络期末复习-part1-概述

1、互联网的组成 互联网由两大块组成。 1、边沿部分&#xff1a;由所有连接在互联网上的主机组成&#xff0c;是用户直接使用的部分。 2、核心部分&#xff0c;由大量网络和路由器组成&#xff0c;为边缘部分提供服务。 2、数据传送阶段的三种交换方式的主要特点 1、电路交…...

A1228 php+Mysql旅游供需平台的设计与实现 导游接单 旅游订单 旅游分享网站 thinkphp框架 源码 配置 文档 全套资料

旅游供需平台 1.项目描述2. 开发背景与意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着社会经济的快速发展&#xff0c;生活水平的提高&#xff0c;人们对旅游的需求日益增强&#xff0c;因此&#xff0c;为给用户提供一个便利的查看导游信息&#xff0c;进行导游招募的平…...

RabbitMQ消息可靠性保证机制5--消息幂等性处理

RabbitMQ层面有实现“去重机制”来保证“恰好一次”吗&#xff1f;答案是没并没有&#xff0c;而且现在主流的消息中间件都没有实现。 一般解决重复消息的办法是&#xff1a;在消费端让我们消费消息操作具有幂等性。 幂等性问题并不是消息系统独有&#xff0c;而是&#xff0…...

Claude3.5如何使用?

Claude 3.5 Sonnet&#xff0c;性能直接吊打了 GPT-4o&#xff0c;甚至价格还更便宜。网友们纷纷展开实测&#xff0c;有人表示自己一半的工作已经可以由它替代了&#xff01;而最让人惊喜的新功能&#xff0c;莫过于 Artifacts 了。 就在昨天&#xff0c;Anthropic 深夜发布了…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...