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

#科研筑基# python初学自用笔记 第九篇 面向对象编程

  • 面向对象编程 Object Oriented Programming ,简称OOP,是一种程序设计思想,这种思想把对象作为程序的基本单元。

  • 类是抽象的,对象是具体的,一种类包括其特定的数据或属性,以及操作数据的函数(方法)。

类和实例

class Student(object):#Student是类 Class,Jack和Lisa是实例 Instance,也就是具体对象;括号里写的是这个新定义的类所继承的类,一般使用最大众的object类def __init__(self,name,score): #用__init___方法来设置对象的属性 Property,属性即为参数,参数和函数参数相同self.name=name #self表示创建的实例本身,所以在__init__方法内部,可以直接把各种属性绑定到selfself.score=scoredef print_score(self): #这类对象对应的关联函数,称为类的方法 Method,只需要一个参数self即可调用封装在类里的数据print('%s:%s' % (self.name,self.score))
Jack=Student('Jack Simpson',99) #创建实例要填好参数
Lisa=Student('Lisa Simpson',19)
Jack.score=98 #可以自由改变示例某一属性的具体值
Jack.city='Beijing' #也可以自由地给一个实例变量绑定属性,因此同一类的对象可能会有不同的属性
Jack.print_score()
Lisa.print_score()
print(Jack.city)
'''
Jack Simpson:98
Lisa Simpson:19
Beijing
'''

访问限制

  • 要让一个实例的属性不被外部访问,就需要在属性名前加上两个下划线__,这样就变成了私有变量,只有内部可以访问了,且这个变量在类中已经被视为_Student_score这样的格式了。

  • 此时如果外部需要获取实例的属性,可以增加获取属性的方法,比如get_name或get_score。

  • 若外部需要改变实例的属性,也可以增加改变的方法,比如 set_score( self , input )

  • 设置访问限制,是为了避免传入无效的参数,在方法里对传入的参数进行检查,设置错误反馈。

继承和多态

class Animal(object):def run(self):print('Animal is running.')def eat(self):print('Animal is eating.')
class Dog(Animal):#编写子类 Subclss 时可以从父类继承,父类又称为基类 Base lass、超类 Super classdef run(self):#子类新建和父类同名的方法时,子类的方法会覆盖父类的方法,这就是多态print('Dog is running.')def eat(self):print('Dog is eating.')
class Cat(Animal):def run(self):print('Cat is running.')def eat(self):print('Cat is eating.')
dog=Dog()
cat=Cat()
dog.run()
cat.run()
dog.eat()
cat.eat()
print(isinstance(dog,Animal))
print(isinstance(dog,Dog))
'''
Dog is running.
Cat is running.
Dog is eating.
Cat is eating.
True
True
'''

此外,多态还有其好处:

class Animal(object):def run(self):print('Animal is running.')def eat(self):print('Animal is eating.')
class Dog(Animal):def run(self):print('Dog is running.')
dog=Dog()
dog.run()
def run_twice(animal):animal.run()animal.run()
run_twice(Animal())
run_twice(Dog())
'''
Dog is running.
Animal is running.
Animal is running.
Dog is running.
Dog is running.
'''

由上例可知,对类和对象来说,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态

获取对象信息

使用type()

print(type(123))
print(type('qwe'))
print(type(1.111))
print(type([1,2,3]))
print(type((1,2,3,4)))
print(type(abs))#对函数使用时会返回对应的class类型
'''
<class 'int'>
<class 'str'>
<class 'float'>
<class 'list'>
<class 'tuple'>
<class 'builtin_function_or_method'>
'''

使用isinstance()

  • 可以用来判断某一对象是否属于某一class类型:

class Life(object):pass
class Animal(Life):pass
class Monkey(Animal):pass
monkey=Monkey()
dog=Animal()
print(isinstance(monkey,Monkey))
print(isinstance(monkey,Animal))
print(isinstance(monkey,Life))
print(isinstance(dog,Monkey))
'''
True
True
True
False
'''
  • 能用type()判断的基本类型也可以用isinsistance()判断:

print(isinstance(123,int))
print(isinstance([1,2,3],list))
'''
True
True
'''
  • 还可以判断一个变量是否是某些类型中的一种:

print(isinstance([1,2,3],(list,tuple)))
print(isinstance((1,2,3),(list,tuple)))
print(isinstance(123,(dict,set)))
'''
True
True
False
'''

使用dir()

print(dir('ABC'))#获取字符这一类的属性和方法
print(dir(123))#获取数字这一类的属性和方法
print(dir([1,2]))#获取列表这一类的属性和方法
print('qwe'.__len__())#等价于len('qwe')
class Human(object):def __init__(self,age,height,weight):self.century=21self.age=ageself.height=heightself.weight=weightdef health(self):return self.age*self.height/self.weight
man=Human(18,170,160)
print(hasattr(man,'century'))  #判断man是否有century这种属性
print(man.century)
print(hasattr(man,'city')) 
setattr(man,'city','Putian')  #给man添加city这种属性,并设置为Putian
print(hasattr(man,'city'))
print(getattr(man,'city'))  #获取man的city属性
print(man.city)
print(getattr(man,'homeland',404)) #获取man的homeland这一属性,若没有,则返回404
'''
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
3
True
21
False
True
Putian
Putian
404
'''

相关文章:

#科研筑基# python初学自用笔记 第九篇 面向对象编程

面向对象编程 Object Oriented Programming &#xff0c;简称OOP&#xff0c;是一种程序设计思想&#xff0c;这种思想把对象作为程序的基本单元。类是抽象的&#xff0c;对象是具体的&#xff0c;一种类包括其特定的数据或属性&#xff0c;以及操作数据的函数&#xff08;方法…...

Python快速上手系列--邮件发送--详解篇

本章就来一起学习一下跑完自动化脚本后如何自动的发送邮件到指定的邮箱。zmail操作&#xff1a;1. 导包 import zmail2. 邮件内容&#xff0c;包含&#xff1a;主题(subject)、正文(content_text)、附件(attachments)3. 发件人信息&#xff0c;包含&#xff1a;发件人账号&…...

【Bluetooth开发】蓝牙开发入门

BLE 蓝牙设备在生活中无处不在&#xff0c;但是我们也只是将其作为蓝牙模块进行使用&#xff0c;发送简单的AT命令实现数据收发。 那么&#xff0c;像对于一些复杂的使用场合&#xff1a;“车载蓝牙”、"智能手表"、“蓝牙音箱”等&#xff0c;我们不得不去了解底层…...

07:进阶篇 - 在程序中嵌入 CTK Plugin Framework

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 如果已经创建了一个应用程序,现在要将 CTK Plugin Framework 嵌入其中,该如何进行呢? 下面,以《06:进阶篇 - Hello,CTK!》中的插件为例,来演示如何使用 CTK Plugin Framework 来加载插件并获取特定…...

快速低成本动画视频课

快速低成本动画视频课Character Animator能做什么如何用character animator制作动画视频Animate能做什么Adobe Animate和Character Animator结合&#xff0c;如何快速制作低成本动画视频课Character Animator能做什么 Character Animator是Adobe公司的一个动画制作软件&#x…...

大数据平台测试-软件测试常见面试回答(持续更新)

面试造航母&#xff0c;入职拧螺丝。面试&#xff0c;讲点面试官想听的。。。 1、你有过漏测的经历吗&#xff1f; 答&#xff1a;这道题肯定是回答有。然后展开描述。就类似面试官问 你印象比较深的一个bug。。。 测试无穷尽&#xff0c;质量也并非测试一个岗位的责任&…...

链表学习之反转链表

链表解题技巧 额外的数据结构&#xff08;哈希表&#xff09;&#xff1b;快慢指针&#xff1b;虚拟头节点&#xff1b; 反转链表 分别实现单向链表和双向链表的反转。 要求&#xff1a;长度为N的链表&#xff0c;时间复杂度为O(N)&#xff0c;额外空间复杂度为O(1)。 反转…...

ONNXRUNTUIME实例分割网络说明

ONNXRUNTUIME c使用&#xff08;分割网络&#xff09;与相关资料&#xff08;暂记&#xff09; initiate a env with an id name(使用id名称启动env) create session (创建会话 ) onnxenv -> sessioninputname [“x”] ,outputname [“t”]inputnodedim [[1,1,192,192…...

几行代码,就写完懒加载啦?

Ⅰ、前言 「懒加载」是网页中非常 常见的&#xff1b;为了减少系统的压力&#xff0c;对于一些电商系统出场频率非常高&#xff1b;那么大家一般用什么方式去实现 「懒加载」 呢 &#xff1f; ① 通过 scroll 的形式&#xff1a; 通过 滚动「scroll」事件&#xff0c;然后去判…...

PyTorch常用的损失函数(ChatGPT)

L1Loss nn.L1Loss 也称为平均绝对误差&#xff08;Mean Absolute Error&#xff0c;MAE&#xff09;。它计算预测值与真实值之间的差异&#xff08;即误差&#xff09;&#xff0c;然后取绝对值并求和&#xff0c;最后除以样本数量得到平均误差。具体来说&#xff0c;对于一批…...

LeetCode——1237. 找出给定方程的正整数解

一、题目 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/description/ 翻译一下题目 意思是&#xff0c;这是一个二维单调递增的函数&#xff0c;函数一共有 9 …...

系统编程中的进程的概念No.3【进程状态】

引言&#xff1a; 北京时间&#xff1a;2023/2/17/8:17&#xff0c;目前听着超能陆战队主题曲《Immortals》&#xff0c;感觉又要螺旋式升天&#xff0c;并且为我今天上午没课感到happy&#xff0c;所以继我们很久以前的关于进程的博客&#xff0c;今天我们就再来学习一下有关…...

推荐 3 款 Golang 语义化版本库

文章目录1.什么是语义化版本 2.0.02.Golang 语义化版本库比较3.小结参考文献1.什么是语义化版本 2.0.0 语义化版本 2.0.0&#xff08;Semantic Versioning 2.0.0&#xff09;是一种用于标识软件版本的约定和规范。它包含三个数字组成的版本号&#xff0c;格式为“MAJOR.MINOR.…...

Windows平台使用gdb连接qemu虚拟机上的系统

先安装MinGW&#xff1b; 除了gcc、g&#xff0c;把gdb也选上&#xff1b;可能选第一个就可以了&#xff0c;不清楚把后面几个也选上&#xff1b; 安装完成看一下gcc, g&#xff0c;gdb&#xff0c;编译工具和调试器都有了&#xff1b; 把bin目录加到环境变量&#xff1b; 看一…...

【博客624】MAC地址表、ARP表、路由表(RIB表)、转发表(FIB表)

MAC地址表、ARP表、路由表(RIB表/FIB表) MAC地址表 MAC地址表是交换机等网络设备记录MAC地址和端口的映射关系&#xff0c;代表了交换机从哪个端口学习到了某个MAC地址&#xff0c;交换机把这个信息记录下来&#xff0c;后续交换机需要转发数据的时候就可以根据报文的目的MAC地…...

【蓝桥日记⑤】2014第五届省赛(软件类)JavaA组❆答案解析

【蓝桥日记⑤】2014第五届省赛&#xff08;软件类&#xff09;JavaA组☃答案解析 文章目录【蓝桥日记⑤】2014第五届省赛&#xff08;软件类&#xff09;JavaA组☃答案解析1、猜年龄2、李白打酒3、神奇算式4、写日志5、锦标赛6、六角填数7、绳圈8、兰顿蚂蚁9、斐波那契10、波动…...

Leetcode.1139 最大的以 1 为边界的正方形

题目链接 Leetcode.1139 最大的以 1 为边界的正方形 Rating &#xff1a; 1744 题目描述 给你一个由若干 0 和 1 组成的二维网格 grid&#xff0c;请你找出边界全部由 1 组成的最大 正方形 子网格&#xff0c;并返回该子网格中的元素数量。 如果不存在&#xff0c;则返回 0。…...

Bing+ChatGPT 对传统搜索引擎的降维打击

早些时候申请了新版 Bing 的内测资格&#xff0c;终于收到了通过的邮件。 一天的体验之后&#xff0c;我的感受是&#xff1a;当新版 Bing 具备了 ChatGPT 的聊天能力之后&#xff0c;它的能力不论是对传统搜索引擎&#xff0c;还是 ChatGPT 自身&#xff0c;都将是降维打击。 …...

【JS】数组常用方法总结-功能、参数、返回值

数组常用方法总结-功能、参数、返回值 用简单的js示例 运行在线工具&#xff1a;链接: 菜鸟工具 菜鸟工具示意图&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/de8589eb1acf42abb0347d8a3a3bbdfa.png 1.会改变原有数组方法 &#xff08;1&#xff09;pu…...

pytest 单元测试前后置处理

文章目录方法1 setup/teardown方法2 fixture 夹具方法3 conftest.py测试用例执行前后的一些处理动作&#xff0c;也叫夹具。以下介绍使用前后置操作的几种方法。方法1 setup/teardown setup&#xff0c;每个测试用例执行前要进行的处理。 teardown&#xff0c;每个测试用例执行…...

3分钟搞定Vue时间轴组件:打造优雅时间线应用的终极指南

3分钟搞定Vue时间轴组件&#xff1a;打造优雅时间线应用的终极指南 【免费下载链接】timeline-vuejs Minimalist Timeline ⏳ with VueJS &#x1f49a; 项目地址: https://gitcode.com/gh_mirrors/ti/timeline-vuejs 还在为Vue项目中的时间线展示而烦恼吗&#xff1f;t…...

三步打造沉浸式AI对话体验:SillyTavern终极指南

三步打造沉浸式AI对话体验&#xff1a;SillyTavern终极指南 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否厌倦了单调的文字聊天&#xff1f;想让AI助手不仅能"说"&#…...

基于双层规划模型的微网新能源经济消纳共享储能优化配置:MATLAB代码复现及详细解读

(文章复现)考虑微网新能源经济消纳的共享储能优化配置matlab代码 参考资料《考虑微网新能源经济消纳的共享储能优化配置》 提出了考虑新能源消纳的共享储能电站容量功率配置方法&#xff0c;针对储能电站投运成本最低与微能源网运行经济性最优的多目标&#xff0c;建立了双层规…...

Cesium1.95内存优化实战:从3D Tiles到GPU Instancing的完整避坑指南

Cesium1.95内存优化实战&#xff1a;从3D Tiles到GPU Instancing的完整避坑指南 在三维地理信息系统和智慧城市项目中&#xff0c;Cesium作为领先的WebGL框架&#xff0c;其性能表现直接决定了复杂场景的流畅度。当遇到大规模模型加载时&#xff0c;内存溢出成为开发者最头疼的…...

保姆级教程:在Jeecg-Vue3项目中快速集成SuperQuery高级查询组件(含完整配置代码)

Jeecg-Vue3项目实战&#xff1a;SuperQuery高级查询组件深度集成指南 在后台管理系统开发中&#xff0c;高效的数据筛选功能直接影响用户体验和操作效率。Jeecg-Vue3作为企业级快速开发框架&#xff0c;其内置的SuperQuery组件能够帮助开发者快速构建复杂的多条件查询面板。本文…...

飞行器设计避坑指南:盘点那些影响气动效率的‘隐形杀手’(从摩擦阻力到干扰阻力)

飞行器设计避坑指南&#xff1a;盘点那些影响气动效率的‘隐形杀手’ 记得第一次参加大学生飞行器设计竞赛时&#xff0c;我们的团队花了整整三个月打造了一架翼展两米的固定翼无人机。试飞当天&#xff0c;看着它摇摇晃晃地起飞&#xff0c;却在爬升阶段突然失速坠毁&#xff…...

零基础图解VLN视觉语言导航:从输入到决策的完整模型拆解

1. 视觉语言导航&#xff08;VLN&#xff09;是什么&#xff1f; 想象你第一次去朋友家做客&#xff0c;对方在电话里说&#xff1a;“进门左转&#xff0c;看到红色沙发后直走&#xff0c;右手边第二个房间就是。”这时候你的大脑会做三件事&#xff1a;用眼睛观察环境&#x…...

新手零基础入门:借助快马AI生成你的第一个班级宠物园网页应用

作为一个刚接触编程的新手&#xff0c;想要快速上手开发一个班级宠物园网页应用&#xff0c;确实会遇到不少挑战。不过现在有了InsCode(快马)平台这样的工具&#xff0c;整个过程变得简单多了。下面我就分享一下自己从零开始构建这个项目的经验&#xff0c;希望能帮助到同样想入…...

用Arduino UNO R3和面包板,从零组装你的第一台meArm机械臂(附电源模块避坑指南)

用Arduino UNO R3和面包板&#xff0c;从零组装你的第一台meArm机械臂&#xff08;附电源模块避坑指南&#xff09; 当你第一次看到meArm机械臂灵活抓取物体的视频时&#xff0c;是否也想过自己动手组装一台&#xff1f;作为开源硬件领域的经典项目&#xff0c;meArm以其精巧的…...

5分钟掌握精灵图智能切割:Pixelorama扩展让资源提取效率倍增

5分钟掌握精灵图智能切割&#xff1a;Pixelorama扩展让资源提取效率倍增 【免费下载链接】Pixelorama A free & open-source 2D sprite editor, made with the Godot Engine! Available on Windows, Linux, macOS and the Web! 项目地址: https://gitcode.com/gh_mirrors…...