Python类和对象-给你介绍个对象? 2022-10-29 03:14 108阅读 0赞 ### 文章目录 ### * 面向对象 * 类的定义 * 类的实例化 * 类的方法 * 类的特殊方法 * 类的继承 * 类的关系 # 面向对象 # -------------------- ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70_pic_center] 害,说得像是我有对象一样。 此对象非彼对象,**面向对象**(Object Oriented)是一种编程的思想,而不是一种编程语言,而Python也是支持面向对象的语言。 面向对象的核心是抽象、继承、多态。 在面向对象思想中,一切皆是对象,每个对象都有它的属性个方法,每个对象都可以通过消息互相交互。 本文将侧重Python中类和对象的使用,更多面向对象思想可参考[设计模式系列博客][Link 1]。 # 类的定义 # -------------------- **语法**: `class ClassName(father class name):` `<statement-1>` `...` `<statement-N>` * ClassName表示自定义类的名字 * father class name 是继承父类的名字 * statement是类成员表达式,可以是属性或方法 **举例**: class TeatA(object): # 类名TestA value = 0 # 属性 def printvalue(self): # 方法 print(self.value) 特别注意的是,类属性除了在class下显示的定义外,也能在方法中隐形的定义: class TestB(object): def printvalue(self): self.value=0 # 隐形定义类属性value print(self.value) # 类的实例化 # -------------------- **实例化**就是创建一个类的对象。定义一个类知识造出一个类型,这个类型只有实例化成对象才有真正的实用意义。 **语法**:直接调用类名。 a = TeatA() # 使用类TestA实例化一个对象a a.printvalue() # a拥有TestA定义好的属性和方法 b = TestB() b.printvalue() **运行结果**: ![在这里插入图片描述][202102081849224.png] **内置类型的实例化**: 实际上Python任何类型都是面向对象意义上的类,所以都可以使用通用的实例化方法。 ![在这里插入图片描述][2021020818552989.png] # 类的方法 # -------------------- 类的方法其实就是定义在类内部的函数,只不过函数的首个参数必须是`self`(代表自身)。类方法里面调用类本身的属性和方法都必须加上`self`。 **私有方法**:私有方法(同private)就是只能被类中的其他方法调用,不能被类外面调用,通过两个下划线开头来定义,私有属性同理。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 1] # 类的特殊方法 # -------------------- **初始化函数**:`__init__` 初始化函数是在类被实例化为对象时调用的函数 ![在这里插入图片描述][20210208214345823.png] **析构函数**:`__del__` 析构函数是在对象被del操作从内存中卸载时所调用的函数 ![在这里插入图片描述][2021020821492875.png] > (插播反爬信息 )博主CSDN地址:[https://wzlodq.blog.csdn.net/][https_wzlodq.blog.csdn.net] **操作符方法**: 操作符方法让类支持加减乘除等各种运算的方法。 <table> <thead> <tr> <th>名称</th> <th>运算符</th> <th>运算符方法</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>加</td> <td>+</td> <td><code>__add__</code></td> <td>两个对象相加</td> </tr> <tr> <td>减</td> <td>-</td> <td><code>__sub__</code></td> <td>两个对象相减</td> </tr> <tr> <td>乘</td> <td>*</td> <td><code>__mul__</code></td> <td>两个对象相乘</td> </tr> <tr> <td>除</td> <td>/</td> <td><code>__div__</code></td> <td>两个对象相除</td> </tr> <tr> <td>取模</td> <td>%</td> <td><code>__mod__</code></td> <td>返回除法的余数</td> </tr> <tr> <td>左移</td> <td><<</td> <td><code>__lshift__</code></td> <td>把一个数的比特向左移一定数目</td> </tr> <tr> <td>右移</td> <td>>></td> <td><code>__rshift__</code></td> <td>把一个数的比特向右移一定数目</td> </tr> <tr> <td>按位与</td> <td>&</td> <td><code>__rand__</code></td> <td>数的按位与</td> </tr> <tr> <td>按位或</td> <td>|</td> <td><code>__ror__</code></td> <td>数的按位或</td> </tr> <tr> <td>按位异或</td> <td>^</td> <td><code>__xor__</code></td> <td>数的按位异或</td> </tr> <tr> <td>按位翻转</td> <td>~</td> <td><code>__invert__</code></td> <td>x的按位翻转</td> </tr> <tr> <td>小于</td> <td><</td> <td><code>__lt__</code></td> <td>x<y返回x是否小于y</td> </tr> <tr> <td>大于</td> <td>></td> <td><code>__gt__</code></td> <td>x>y返回x是否大于y</td> </tr> <tr> <td>小于等于</td> <td><=</td> <td><code>__le__</code></td> <td>x<=y返回x是否小于等于y</td> </tr> <tr> <td>大于等于</td> <td>>=</td> <td><code>__ge__</code></td> <td>x>=y返回x是否大于等于y</td> </tr> <tr> <td>等于</td> <td>==</td> <td><code>__eq__</code></td> <td>x==y比较对象是否相等</td> </tr> <tr> <td>不等于</td> <td>!=</td> <td><code>__ne__</code></td> <td>x!=y比较两个对象是否不想等</td> </tr> <tr> <td>自身加</td> <td>+=</td> <td><code>__iadd__</code></td> <td>x+=y将y加到x中去</td> </tr> <tr> <td>自身减</td> <td>-=</td> <td><code>__isub__</code></td> <td>x-=y将y从x中减去</td> </tr> <tr> <td>切片</td> <td>x[i:j]</td> <td><code>__getlice__</code></td> <td>访问x的i到j部分z</td> </tr> <tr> <td>下标访问</td> <td>x[i]</td> <td><code>__getitem__</code></td> <td>通过i下标访问x</td> </tr> </tbody> </table> 只要重载了对应运算符方法,那么类就能使用对应运算符了。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 2] # 类的继承 # -------------------- **继承**(泛化)是使一个类获得另一个类的所有属性和方法的能力,被继承的类称为父类或基类,继承的类称为子类或派生类。 **语法**: `class <name>(superclass1,superclass2,...)` ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 3] **多重继承**: 指一个子类继承了好几个父类,多重继承颇有争议,在C++中受人诟病,Java中用接口取代了,不过Python仍支持多重继承。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 4] **重载**: 指子类的属性名或方法名与父类相同时,子类的会覆盖掉父类的。 ![在这里插入图片描述][20210208223325284.png] **多重继承的重载**: 重载不只存在于子类重载父类,害存在于多重继承时父类间的重载。 当父类们的属性和方法相同时,重载规则是`从右向左`重载。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 5] # 类的关系 # -------------------- Python中类的关系除了上面讲的继承(泛化)外,还有依赖、关联、聚合、组合。java有接口的话还有实现关系。 关于uml的知识,可参考[一文掌握UML类图:PlantUML实操分享][UML_PlantUML] **依赖**:类的某个方法以被依赖的类作为其参数。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 6] **关联**:类作为另一个类的成员属性 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 7] **聚合和组合**:类的实例作为另一个类的属性,特殊的关联。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 8] [Python系列博客持续更新中][Python] > **原创不易,请勿转载**(本不富裕的访问量雪上加霜 ) > 博主首页:[https://wzlodq.blog.csdn.net/][https_wzlodq.blog.csdn.net] > 微信公众号:[`吾仄lo咚锵`][lo] > *如果文章对你有帮助,记得一键三连❤* [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70_pic_center]: /images/20221024/a92ad7317fc0489bb74acd3bd512b6cb.png [Link 1]: https://blog.csdn.net/qq_45034708/category_10385711.html [202102081849224.png]: /images/20221024/2a29bebb4e004a9d81d2133ea2868ac4.png [2021020818552989.png]: /images/20221024/5ed1590e1d514674b5f8fc02dd5a0f0d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70]: /images/20221024/286da901dffe447cac990bf1035feef6.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 1]: /images/20221024/b3df51e9a9b34a53bec2078c69815df3.png [20210208214345823.png]: /images/20221024/19e4c6bc960d491b9fd06bb03ef25b84.png [2021020821492875.png]: /images/20221024/cf2f0065108d434eaac24bfa3fbd8d45.png [https_wzlodq.blog.csdn.net]: https://wzlodq.blog.csdn.net/ [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 2]: /images/20221024/38205cc59f5d46caa000dad0086d65b2.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 3]: /images/20221024/a1451ace3e514f5ca36dda63185106a9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 4]: /images/20221024/9c55f0c8d360415eb0275608759a9025.png [20210208223325284.png]: /images/20221024/da8b8f45363a4492bf3e1384b1270ebb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 5]: /images/20221024/a39bf8da18294d4da936b728ac922fd6.png [UML_PlantUML]: https://wzlodq.blog.csdn.net/article/details/108661399 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 6]: /images/20221024/82e1eae8ae294a97b59acdad488971a9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 7]: /images/20221024/6bb98dbe937345fd85e5754f327ed2e1.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDM0NzA4_size_16_color_FFFFFF_t_70 8]: /images/20221024/de14f07d66fc4786912421cd6aa3fc69.png [Python]: https://blog.csdn.net/qq_45034708/category_10792535.html [lo]: https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzkwMzE2Nzg4MQ==#wechat_redirect
相关 python 之 类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核心概念 1.1 类 你的名字/ 2021年09月04日 07:21/ 0 赞/ 460 阅读
相关 Python 类和对象(3) ![1465325-20190525221345853-426062712.jpg][] 大家有没有想我呢? 今天讲一下类的一些概念: 公开属性 私有属性 基本方法 Love The Way You Lie/ 2021年12月09日 01:13/ 0 赞/ 339 阅读
相关 【零基础入门学习Python】 类和对象:介绍对象 “对象”描述 比如描述一个“龟”, ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG 偏执的太偏执、/ 2022年03月30日 03:14/ 0 赞/ 136 阅读
相关 python 类和对象 今天给大家分享下[python 类][python]的一些基础知识点,学到这里相信大家对python的了解已经有一定的程度了。今天说的python 类很合适那些做长期产品开发的 左手的ㄟ右手/ 2022年04月10日 08:28/ 0 赞/ 291 阅读
相关 《零基础入门学习Python》第036讲:类和对象:给大家介绍对象 目录 0. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式! 测试题 0. 对象中的属性和方法,在编程中实际是什么? 1. 类和对象是什么关系呢? 迷南。/ 2022年04月14日 06:12/ 0 赞/ 252 阅读
相关 python类和对象(7) 面向过程:根据业务逻辑从上到下写代码 面向对象:对函数进行分类和封装,让开发“更快更好更强… 面向对象三大特性 面向对象的三大特性是指:封装、继承和多态 快来打我*/ 2022年06月10日 13:49/ 0 赞/ 241 阅读
相关 [Python] Python3 - 类和对象 1 - 类和对象 面向过程和面向对象对象的编程 > 面向过程的编程:函数式编程,C程序等 > > 面向对象的编程:C++, Java, Python等 类和对象:是面向 ゝ一世哀愁。/ 2022年07月18日 05:52/ 0 赞/ 171 阅读
相关 给Python的类和对象动态增加属性和方法 通常我们会将编程语言分为静态和动态。静态语言的变量是在内存中的有类型的且不可变化的,除非强制转换它的类型;动态语言的变量是指向内存中的标签或者名称,其类型在代码运行过程中会根据 小咪咪/ 2022年09月02日 04:26/ 0 赞/ 142 阅读
相关 python 类和对象 有必要学吗_Python类和对象 一、概念 1、面向对象(Object Oriented,即OO),是一种设计思想。 2、面向对象编程(Object Oriented Programming,即OOP),可 迈不过友情╰/ 2022年10月22日 10:50/ 0 赞/ 151 阅读
相关 Python类和对象-给你介绍个对象? 文章目录 面向对象 类的定义 类的实例化 类的方法 类的特殊方法 类的继承 类的关系 面向对象 ------------ 我会带着你远行/ 2022年10月29日 03:14/ 0 赞/ 109 阅读
还没有评论,来说两句吧...