Python之面向对象(二)
目录
- 属性和方法
- 静态属性/方法、普通属性/方法、类方法
- 保护和私有属性/方法
- 魔术方法
- 构造方法(\_\_new__/\_\_init\_\_)
- 析构方法(\_\_del__)
- 调用方法(\_\_call__)
- toString方法\_\_str__、\_\_repr\_\_
- \_\_getitem__、setitem、delitem
- \_\_add__、\_\_gt\_\_方法
- with \_\_enter__、\_\_exit\_\_
- 内置属性及其功能
- python自省
- python元类
- 抽象基类
属性和方法
静态属性/方法、普通属性/方法、类方法
class A():name = "changsha" # 静态属性,类属性def __init__(self):self.country="china" # 普通属性,实例属性#普通(实例)方法#接收的第一个参数,就代表实例本身def normal_method(self,name):pass# 类方法, 使用classmethod.装饰的方法,称为类方法# 接收的第一个参数是类@classmethoddef class_method(cls,name):pass# 静态方法, 使用staticmethod装饰的方法,不装饰的话实例调用该方法时默认会传递实例对象给方法的,这样就会报错# 可以接收参数也可以不接受参数,参数不代表实例也不代表类@staticmethoddef static_method(name):pass
实例可以调用三种方法,用类去调用实例方法时需手动传入一个实例
保护和私有属性/方法
class test:name = ""_name = "" # 保护属性__name = "" # 私有属性def _func(self): # 保护方法passdef __func(self): # 私有方法pass
对于保护属性和方法,使用起来与普通属性和方法没有区别,只是在使用import * 时不能被导入
对于私有属性和方法,其实是伪私有。不过是将双下划线的属性或方法改了一个名字为: _类__标识名
class test:__name = "私有属性" # 私有属性def __func(self): # 私有方法print("私有方法")t = test()
print(t._test__name) # 通过这样的格式即可调用
t._test__func()
魔术方法
所有以双下划线开头和结尾的方法,统称为魔术方法(magic method)
这种魔术方法不需要调用,在特定场景下自动执行。
由于markdown格式下对下划线做纠正太麻烦了,所以下面有的地方可能格式有些不正确,但能明白我指的是那个方法就行
构造方法(__new__/__init__)
• new:创建实例
• init:初始化实例
析构方法(__del__)
在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作, 如关闭一些数据库连接,关闭打开的临时文件等
class a:def __del__(self):print("del")a1 = a()
del a1 # 此时就会自动调用del方法,不手动del时,等程序执行结束时也会自动执行del方法
调用方法(__call__)
把类实例化后的对象当做函数来调用的时候自动被调用
class a:def __call__(self):print("call")a1 = a()
a1() # 此时就会执行call方法,像函数、类都是通过call方法来实现的
toString方法__str__、__repr__
有str方法时使用str方法,没有就使用repr方法
class A():def __str__(self):return "str...A"def __repr__(self):return "repr...A"
a = A()
print(a) # print一个实例时就是调用str方法
str_a = str(a) # 使用str()函数时也是调用实例中的str方法# 当在交互式命令行中输入a之后回车,就会调用repr方法输出内容
__getitem__、setitem、delitem
使类的实例能够像字典一样被使用,适合用来进行配置
class A():def __init__(self):self.data = {} # 初始化个空字典def __getitem__(self, key):return self.data.get(key, 0) # key存在返回value,不存在返回0def __setitem__(self, key, value):self.data[key] = valuedef __delitem__(self, key):del(self.data[key])
a = A()
a["name"] = "sc" # 此时调用setitem方法,name传给key,sc传给value
print(a["name"]) # 此时调用getitem方法
del a["name"] # 调用delitem方法
__add__、__gt__方法
自定义 加法 和 大于方法
class A:def __init__(self,num):self.time = time.time()self.num = numdef __add__(self,x):print("this is add")return self.num + xdef __gt__(self,other):print("this is gt")return self.time > other.time # 根据创建的时间戳来比大小,越新创建的越大
a1 = A(5)
b = a1 + 3 # 调用add方法
print("b is :"b)
a2 = A(4)
print(a1>a2) # 调用gt方法
with __enter__、__exit__
使用with语句管理的对象 称为 上下文管理器对象
都会实现enter、exit魔术方法
enter做一些初始化工作
exit做一些结束收尾工作,释放资源
内置属性及其功能
__dict__:类的属性(包含一个字典,由类的数据属性组成)
__doc__:类的文档字符串
__name__:类名
__module__:类定义所在的模块
__bases__:类的所有父类构成元素
__class__:类型,比如类就返回type,实例就返回它的父类
python自省
对某一个对象属性(方法)的增删改查
#python自省
print(hasattr(math,"xx")) #判断math有没有xx属性
print(setattr(math,"xx",1)) #设置math的xx属性为1
print(getattr(math,"xx") #获取math的xx属性
print(delattr(math,"xx")) #删除math的xx属性def func2():pass
setattr(a,"func",func2) # 将func2方法添加到a实例中并命名为func
python元类
创建类的类称之为元类
一些基本类的元类都是type
print(str.__class__) # 输出:<class 'type'>
>>> print(object.__class__) # object是所有类的父类,这是从继承的角度
<class 'type'> # type是创建类中最顶层的类,这是从实例和类的角度
# 两者的关系很难说,type继承了object,但object又由type创建
可以自定义一个元类
class MyMate(type): # 继承type类#拦截类的创建# 名字 继承(元组) 方法属性(dict)def __new__(cls,name,bases,attrs):attrs["test"] = "mymate test"print(name,bases,attrs)return type.__new__(cls,name,bases,attrs)
class A(metaclass=MyMate):passa = A()
print(a.test)
抽象基类
抽象基类 定义了接口规范,子类必须实现父类里面的抽象方法
抽象类不能实例化
想定义抽象基类,需要先导入ABC模块:
from abc import ABC, abstractmethod
ABC模块提供了一种定义抽象基类的方式,是指"Abstract Base Classes"(抽象基类)模块。它是Python标准库中的一个模块,位于
abc包中。
from abc import ABC,abstractmethod
#抽象基类
class A(ABC):@abstractmethod # 被这个装饰的方法称为抽象方法def eat(self):passdef drink(self): # 没有被@abstractmethod装饰的方法为普通方法pass
class B(A): # 子类必须实现父类中的抽象方法def eat(self):print("this is eat")
b = B()
相关文章:
Python之面向对象(二)
目录 属性和方法静态属性/方法、普通属性/方法、类方法保护和私有属性/方法魔术方法构造方法(\_\_new__/\_\_init\_\_)析构方法(\_\_del__)调用方法(\_\_call__)toString方法\_\_str__、\_\_repr\_\_\_\_getitem__、setitem、delitem\_\_add__、\_\_gt\_…...
ESP32用作经典蓝牙串口透传模块与手机进行串口通信
ESP32用作经典蓝牙串口透传模块与手机进行串口通信 简介ESP32开发板Arduino程序手机与ESP32开发板进行蓝牙串口透传通信总结 简介 ESP32-WROOM-32模组集成了双模蓝牙包括传统蓝牙(BR/EDR)、低功耗蓝牙(BLE)和 Wi-Fi,具…...
Python 操作 CSV
使用过 CSV 文件都知道:如果我们的电脑中装了 WPS 或 Microsoft Office 的话,.csv 文件默认是被 Excel 打开的,那么什么是 CSV 文件?CSV 文件与 Excel 文件有什么区别?如何通过 Python 来操作 CSV 文件呢?带…...
自动化运维工具Ansible教程(二)【进阶篇】
文章目录 前言Ansible 入门到精通自动化运维工具Ansible教程(一)【入门篇】自动化运维工具Ansible教程(二)【进阶篇】精通篇 进阶篇1. Ansible 的高级主题(例如:角色、动态清单、变量管理等)**1. 角色(Roles)**&#x…...
嵌入式Linux基础学习笔记目录
1. 嵌入式Linux应用开发基础知识 1.1 交叉编译 1.2 GCC编译器 1.3 makefire 1.4 文件I/O 1.5 Framebuffer应用编程 1.6 文字显示及图象显示 1.7 输入系统应用编程 1.8 网络编程 1.9 多线程编程 1.10 串口编程 1.11 I2C应用编程 2. 源码分析 2.1 MQTT源码 2.2 蓝牙源码 2.3 MJP…...
JVM | 垃圾回收器(GC)- Java内存管理的守护者
引言 在编程世界中,有效的内存管理是至关重要的。这不仅确保了应用程序的稳定运行,还可以大大提高性能和响应速度。作为世界上最受欢迎的编程语言之一,通过Java虚拟机内部的垃圾回收器组件来自动管理内存,是成为之一的其中一项必…...
yolov5添加ECA注意力机制
ECA注意力机制简介 论文题目:ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 论文地址:here 基本原理 🐸 ECANet的核心思想是提出了一种不降维的局部跨通道交互策略,有效避免了降维对于通道注意…...
华为在高端智能手机市场再次撕开了一道深深的口子
智能手机市场趋于饱和,增长变得越来越难,智能手机厂商从被动卷走向了主动卷。 8月29日,华为宣布推出“HUAWEI Mate 60 Pro先锋计划”,并于当天中午在官方商城、部分线下门店上线销售新机Mate 60 Pro,它是全球首款支持卫…...
前端设计模式和设计原则之设计模式
作为前端开发,在code时,或多或少地都会践行设计模式,但是你清楚自己用到的是何种设计模式吗? 为什么前端开发一定要懂设计模式呢? code时不遵从设计模式,又能怎样呢? 上面的问题可以留作思考…...
提高在速卖通产品上的曝光率——自养号测评优势全面解析!
速卖通是国际贸易的一个平台,是国内外企业之间的一个桥梁。在速卖通中,如果要让产品得到更好地推广,就必须让产品得到更多的消费者认可。而产品的认可度除了品质保障和售后服务之外,评测也是非常重要的环节。 对于速卖通店铺销量…...
指针进阶(二)
指针进阶 5.函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函数案例:使用回调函数,模拟实现qsort(采用冒泡的方式)。案例:测试qsort排序结构体数据 5.函数指针 补: &函数名就是函数的地址 …...
【HCIE】03.BGP高级特性
每一条BGP路由都可以携带多个路径属性,针对其属性也有特有的路由匹配工具,包括:AS Path Filter和Community Filter。 import方向的属性,出现在如策略里面,加入到BGP路由表中,再传给路由表里,出去…...
单个处理数据祖籍列表层级关系
CREATE DEFINERroot% FUNCTION sys_organization_getAncestorsNames(deptId varchar(36)) RETURNS varchar(1000) CHARSET utf8DETERMINISTIC BEGINDECLARE parentDeptId varchar(36) default ; -- 父部门iddeclare parentDeptName varchar(100) default ; -- 父部门名称decla…...
Maven部署打包多环境(开发、测试、生产)配置教程
Maven打包多环境(开发、测试、生产)配置教程 1、多环境配置的必要性1.1 没有进行多环境配置进行的操作复杂性1.2 不影响运行时配置 2、配置方案2.1 添加profile属性2.1 添加两个插件2.3 主配置文件中添加插值变量 3、效果展示3.1 勾选prod环境3.2 控制台…...
【计算思维题】少儿编程 蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套
蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套 第十四届蓝桥杯省赛真题 1、要把下面4张图片重新排列成蜗牛的画像,该如何排列这些图片 A、 B、 C、 D、 答案:A 考点分析:主要考查小朋友们的观察能力空...
【Hello Algorithm】贪心算法
本篇博客介绍: 简单介绍下贪心算法 贪心算法 介绍贪心算法最小字典序的字符串拼接最多会议数切棍子的最小成本IPO灯塔问题 介绍贪心算法 贪心算法是一种极具有自然智慧的算法 它会使用以一种局部最功利的标准来做出一个当前看来最好的选择 如果说我们根据局部最优…...
TOP-K问题
目录 问题描述 解法及思想 第一种方式 算法思想 具体实现 第二种方式 算法思想 具体实现 问题描述 Top-K问题是一个十分经典的问题,一般有以下两种方式来描述问题: 在10亿的数字里,找出其中最大的100个数;在一个包含n个整…...
【保姆级从0到1】UE5 蓝图入门教程1:关卡、蓝图入门
20230113 1、新建项目 新建选择 UE 5.1 项目 选择蓝图,项目位置 改变编辑器布局,选择经典布局 2、关卡与蓝图 选择 File -> New Level 准备创建关卡 选择 Basic,点击 Create 进行创建 Ctrl S 保存新建的关卡 关卡蓝图的打开 鼠标右键&…...
【码银送书第六期】《ChatGPT原理与实战:大型语言模型的算法、技术和私有化》
写在前面 2022年11月30日,ChatGPT模型问世后,立刻在全球范围内掀起了轩然大波。无论AI从业者还是非从业者,都在热议ChatGPT极具冲击力的交互体验和惊人的生成内容。这使得广大群众重新认识到人工智能的潜力和价值。对于AI从业者来说…...
redis 报错 Redis protected-mode 配置文件没有真正启动
(error) DENIED Redis is running in protected mode because protected mode is enabled Redis protected-mode 是3.2 之后加入的新特性,在Redis.conf的注释中,我们可以了解到,他的具体作用和启用条件 链接redis 时只能通过本地localhost …...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
