python之面向对象编程

01 第一步 创建类, self指向调用该函数的对象 也就是通过类实例出来的对象 class Person():def __init__(self):self.name = 'zs'self.age = 12def fn(self):print(self)p1 = Person()
print(p1)  # <__main__.Person object at 0x000002509F331790>
print(p1.fn())  #  <__main__.Person object at 0x000002509F331790>

02 一个类可以创建多个实例对象 每个实例对象的指针不同也就是内存地址不同

p2 = Person()print(p2) <__main__.Person object at 0x0000022309AD1940>print(p2.fn()) <__main__.Person object at 0x0000022309AD1940>p1 = Person()print(p1) <__main__.Person object at 0x0000022309AD1910>print(p1.fn()) <__main__.Person object at 0x0000022309AD1910>

03 添加获取对象的属性  给对象添加私有的属性和方法

p1 = Person()p1.sex = '男'p1.fn1 = lambda : 10print(p1.fn1())   10print(p1.sex)  男

04  类的返回值 通过  __str__来实现

class Person():def __init__(self):self.name = 'zs'self.age = 12def fn(self):print(self)def __str__(self):return f'{self.name}-{self.age}'print(Person()) # zs-12 p1 = Person()print(p1)  # zs-12

05 类的__del__属性 当代码被执行完 内存空间被释放掉 就会执行这个方法

class Person():def __init__(self):self.name = 'zs'self.age = 12def fn(self):print(self)def __str__(self):return f'{self.name}-{self.age}'def __del__(self):print('我被释放了')Person() #  我被释放了

06 案例 之 地瓜的类 

class Digua():def __init__(self):self.time1 = 0self.status = '生' # 0 生  1-10 未熟  11-20 快熟  20以上 熟了self.list = [] # 需要添加的材料def addTime(self,time):self.time1+=timeif self.time1 == 0:self.status = '生'elif 0<self.time1<10:self.status = '未熟'elif 10<self.time1<20:self.status = '快熟'else:self.status = '熟了'def addList(self,cailiao):self.list.append(cailiao)def __str__(self):print(f'地瓜烤了{self.time1}分钟,目前的状态是{self.status},添加的材料有{self.list}')
07 类的继承 class A():def __init__(self):self.name ='zs'class B(A):passc = B()
print(c.name) # zs 

08  类的属性和方法的覆盖 , 如果同时继承多个父类,有重名的打印的是第一个父类

class A():def __init__(self):self.name = 'zs'def fn(self):print('我是A')class B():def __init__(self):self.name = 'ls'def fn1(self):print('我是B')class C(A,B):passc = C()
print(c.name) # zs 

09 自用拥有的属性和方法与父级重名以自身的为主

class A():def __init__(self):self.name = 'zs'class B(A):def __init__(self):self.name = 'ls'b = B()print(b.name) # ls

10  在子类如何调用父类的属性和方法呢:

第一种方式 在子类中调用需要先调用父类的 __init__(self) 的方法  再调用父类的属性或者方法

class B(A):def __init__(self):self.name = 'ls'def fn(self):    A.__init__(self)  #  在这里使用父类的属性return A().nameb = B()print(b.fn()) # zs 

11 定义私有的属性和方法 以__开头

class A():def __init__(self):self.__name = 'zs'self.age = 20def __fn(self):print('私有的方法')a = A()
print(a.__name) # 报错
print(a.age) # 20 

12 类的多态

class Dog():def fn(self):print('wangwnag')class Person():def fn(self):print('你好')class Lei():def fn(self,lei):return lei.fn()dog = Dog()
person = Person()
lei = Lei()
lei.fn(dog) # wangwang
lei.fn(person) # 你好

13 类方法的使用场景。 如访问私有类属性的时候 定义类的方法 使用@claasmethod

class A():__tools = 'wo'@classmethoddef fn(cls):print(cls.__tools)def fn1(self):print(self.__tools)a = A()
a.fn1()
a.fn()

14 静态方法既可以类访问也可以对象访问

class A():__tools = 'wo'def fn1(self):print(self.__tools)@staticmethoddef fn():print('123')A.fn()
a =A()
a.fn()

15  捕获错误

try:print(1/0)
except:print('出现了错误')
else:print('没有错误')
finally:print('不管有没有错都打印')
try:print(1/0)
except (NameError,ZeroDivisionError):  # 捕获指定的错误print('出现了错误')
else:print('没有错误')
finally:print('不管有没有错都打印')
try:print(1/0)
except (NameError,ZeroDivisionError) as error:  # 捕获指定的错误print(error) # 打印报错信息
else:print('没有错误')
finally:print('不管有没有错都打印')

16 模块的导入方式:

import 模块名

from 模块名  import 功能名

from 模块名  import *

from 模块名  as 别名

from 模块名  import 功能名 as 别名

17 在文件中定义导出的方法 使用 __all__ = ['导出的方法']

__all__ = ['test']

test ():

        print(‘123’)

18 创建包 包会自创一个__init__的文件

在这个文件中可以定义导出的模块列表

正常导入 import 包名.文件名  使用的时候 包名.文件名.方法()

18 __dict__将实例对象 转化为字典的形式{}

class A():def __init__(self):self.age = 20a = A()
print(a.__dict__) # {'age': 20}

19 eval() 将字符串变为list 

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"print(eval(a)) #  [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]b = "[{'bane':'123'},{'age':'12'}]"
print(eval(b)) # [{'bane': '123'}, {'age': '12'}]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独孤思维:和副业付费学员吵架了

01 之前和老婆出去逛街。 很久没有静下心来&#xff0c;谈这么久。 聊到工作副业&#xff0c;孩子教育。 发现很多内容都存在偏差&#xff0c;之前一直没有深思讨论过。 经过这一次讨论之后&#xff0c;更优化了关于小孩的教育观&#xff0c;关于工作和副业的平衡问题。 …

LeetCode 0522.最长特殊序列 II:两句话讲明思路(子序列判断)

【LetMeFly】522.最长特殊序列 II&#xff1a;两句话讲明思路(子序列判断) 力扣题目链接&#xff1a;https://leetcode.cn/problems/longest-uncommon-subsequence-ii/ 给定字符串列表 strs &#xff0c;返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在&#xff0c;…

VM4.3 二次开发02 方案加载、执行及显示

效果 这是二次开发的第二个文章&#xff0c;所以不重复说明环境配置相关的内容。如果不懂的可以看本专栏的上一个文章。 海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果-CSDN博客 界面代码 <Window x:Class"VmTestWpf.App.MainWindow"x…

element-plus的Tour 漫游式引导怎么去绑定Cascader 级联选择器

首先官方例子是用的button 官方.$el这个log出来是&#xff1a; 知道是以元素为准就拿对应的元素就行 级联选择器.$el是这样的&#xff1a; 你可以移入这个元素部分去看看是哪个要用的&#xff08;好像火狐直接放上去就可以看到元素表示&#xff0c;谷歌要双击或者右键选择去看…

手机ip地址怎么换成成都的

随着互联网的快速发展&#xff0c;我们越来越依赖于网络进行各种操作。而在某些情况下&#xff0c;为了更好地享受网络服务或保护个人隐私&#xff0c;我们可能需要改变手机的IP地址。本文将详细介绍如何将手机IP地址换成成都的&#xff0c;同时提醒大家在操作过程中需要注意的…

ts-node

ts-node 是一个 TypeScript 执行引擎&#xff0c;它允许您直接运行 TypeScript 代码&#xff0c;而无需先将其编译为 JavaScript。这在开发和测试过程中非常有用&#xff0c;可以提高开发效率。以下是关于 ts-node 的一些基本信息和使用方法。 安装 您可以通过 npm 或 yarn 安…

【AI开发】CRAG、Self-RAG、Adaptive-RAG

先放一张基础RAG的流程图 https://blog.langchain.dev/agentic-rag-with-langgraph/ 再放一个CRAG和self-RAG的LangChain官方博客 Corrective RAG(CRAG) 首先需要知道的是CRAG的特色发生在retrieval阶段的最后开始&#xff0c;即当我们获得到了近似的document&#xff08;或者…

(day1)数据类型详解及DML语句入门

一、数据类型 1、整型类型 &#xff08;1&#xff09;创建数据库 CREATE DATABASE ql_linux&#xff1b; CREATE SCHEMA IF NOT EXISTS ql_linux&#xff1b; //IF NOT EXISTS如果没有表就创建 SHOW DATABASE; //查看数据库 &#xff08;2&#xff09;创建表 C…

【仿真建模-anylogic】Conveyor Network理念解析

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-17 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 概念 Conveyor Network由物料处理库中的多种空间标记元素所构成的图形化运输网&#xff0c;如&#xff1a;Conveyor、Station、Turn…

【Git】-- 添加公钥到 github 或者gitlab上

仅针对系统&#xff1a;mac os 、 unix、linux 1、检查是否有 id_rsa.pub $ cd ~ $ ls -al ~/.ssh 注意&#xff1a;若已有 id_rsa.pub&#xff0c;则必要执行 第二步&#xff0c;避免覆盖掉原有正常的公钥。 配置多个 git 账号请参考&#xff1a;同一台电脑配置多个git账…

每日一题——Python实现PAT甲级1132 Cut Integer(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 正确性和功能性 时间复杂度 空间复杂度 其他点评 总结 我要更强 优化后…

黑马苍穹外卖1 Git+Nginx反向代理+员工登录表加密+Swagger

整体结构 前端 &#xff1a;管理端Web/用户端(小程序) 后端&#xff1a;后端服务&#xff08;java&#xff09; 1 直接使用前端环境 2后端环境搭建 3 完善登录功能 后端环境搭建基于Maven&#xff0c;分模块开发 common公共类&#xff1a;constant常量类、、、、 pijo类:实…

SQL:按用户名复制权限

生产系统中有一个模块是管理用户及菜单权限&#xff0c;它们是由3个数据表组成&#xff0c;关系及字段如下&#xff1a; 原来为每个用户添加菜单的访问权限时都是一个一个添加&#xff0c;但今天遇到有个新来的员工&#xff0c;需要具有与另一个员工相同的权限。新建一个用户后…

vue3 中实现 验证码发送 刷新不变倒计时

今天实现一个倒计时的功能 在平常开发前端的功能的时候 不管是 移动端还是web端 我们都会有注册 登录 中的发送验证码功能 实现绑定以及注册功能。今天我主要分享一下当前的验证码实现原理。 有两种做法(我目前认为以及看到的) ① 做一个简单的倒计时 ② 实时监测倒计时 刷…

前端RSA加解密(支持超长分段)

过程不复杂, 只是网上结合后端的RSA加解密资料参差不齐, 比较零散, 而且大多博文都是基于最原始的RSA加解密, 当加解密参数过长的时候, 会报[Message too long for RSA] 解决方案, 找了一圈, 都不大完整, 完整的又很复杂, 加了一堆方法, 看着都头疼! 其实加解密的本质都一样的,…

今日AI资讯-20240615

1. Follow Your Emoji 一键让照片变表情包 腾讯混元联合港科大、清华大学联合推出肖像动画生成框架Follow Your Emoji&#xff0c;可以通过人脸骨架信息生成任意风格的脸部动画&#xff0c;一键创建表情包。基于算法革新和数据积累&#xff0c;Follow Your Emoji可以支持对脸部…

中电金信:银行业数据中心何去何从

20多年前&#xff0c;计算机走进国内大众视野&#xff0c;计算机行业迎来在国内的高速发展时代。银行业是最早使用计算机的行业之一&#xff0c;也是计算机技术应用最广泛、最深入的行业之一。近年来&#xff0c;随着银行竞争加剧&#xff0c;科技如何引领业务、金融科技如何发…

聊聊DoIP吧(三)-端口号port

DoIP在UDP和TCP建立连接和发送诊断报文的过程中使用的端口定义如下&#xff1a;

【会议】一张图片讲清楚:项目启动会议

另附上启动会前需要准备的内容&#xff1a;

Windows10笔记本如何系统重装?64位电脑重装系统需小心!一键安装超详细步骤!

在日常生活和工作中&#xff0c;我们有时会遇到Windows 10笔记本系统运行缓慢、频繁出现错误或受到病毒攻击等问题。这时&#xff0c;重装系统就成了解决这些问题的最佳选择。然而&#xff0c;对于许多用户来说&#xff0c;尤其是64位电脑用户&#xff0c;重装系统可能是一项既…