Python3 面向对象程序设计

类的定义

Python使用class关键字来定义类

class Car:def infor(self):print("This is a car")
car = Car()
car.infor()

内置方法isinstance()来测试一个对象是否为某个类的实例

self参数

  • 类的 所有实例方法都有一个默认的self参数,并且必须是方法的第一个形参。但是不一定命名为self
  • self参数代表将来要创建的对象(实例)本身
  • 在内部,访问实例属性需要以self为前缀
  • 在外部,通过对象名调用对象方法时并不需要传递这个参数,如果在外部通过类名调用对象方法则需要显示为self传递参数

类的成员和实例成员

  • 类的成员:在类中所有方法定义之外定义的,通过类名或者对象名来访问
  • 实例成员:一般是指在构造函数__init__()中定义的(在其他函数中也可以,在外部定义也可以),在类内部定义和使用时必须以self作为前缀,在类的外部必须通过对象名访问。我们可以同时拥有相同名字的类成员和实例成员。当名字相同时根据访问方式的不同进行区分
  • 类成员是各个实例共享的,而实例成员不会共享
  • 混入(mixin)机制:可以动态地为类和对象增加成员,是Python动态类型特点的重要体现
    在这里插入图片描述- 混入机制在大型项目开发中非常方便和实用
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

私有成员和公有成员

  • 私有成员:以两个下划线__开头
    • 在类的外部不能直接访问,需要通过对象的公有成员方法来访问
    • 可以通过Python支持的特殊方式来访问
  • 公有成员:既可以在类的内部访问,也可以在外部程序中使用

在这里插入图片描述用下划线作为变量名和方法名前缀和后缀表示类的特殊成员:

  • _XXX受保护成员,不能用from module import *导入
  • __XXX__系统定义的特殊成员
  • __XXX私有成员,只有类对象自己能访问,在对象外部可以使用对象名._类名_XXX这样特殊的方式进行访问

IDLE环境中,在对象或者类名后面加上一个圆点.稍等一秒钟会自动列出其所有公开成员,模块也具有同样的用法
在圆点.后面再加一个下划线则会列出该对象、类或者模块的所有成员,包括私有成员

成员方法

  • 公有方法、私有方法都属于对象,私有方法的名字以两个下划线开始,每个对象都有自己的公有方法和私有方法,在这两类方法中可以访问属于类和成员的对象
  • 公有方法通过对象名直接调用,私有方法不能直接调用,只能再属于对象的方法中使用self调用或者使用特殊的方式
  • 如果通过类名来调用属于对象的公有方法,则需要显式为该方法传递self参数,用来指明访问哪个对象的数据成员
  • 静态方法和类方法都可以用过类名和对象名调用,但不能直接访问属于对象的实例成员,只能访问属于类的成员
  • 一般将cls作为类方法的第一个参数名称,但也可以用其他名字作为参数,并且在调用类方法时不需要为该参数传递值
  • 从类⽅法和实例⽅法以及静态⽅法的定义形式就可以看出来,类⽅法的第⼀ 个参数是类对象cls,那么通过cls引⽤的必定是类对象的属性和⽅法;⽽实例 ⽅法的第⼀个参数是实例对象self,那么通过self引⽤的可能是类属性、也有 可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实 例属性的情况下,实例属性优先级更⾼。静态⽅法中不需要额外定义参数, 因此在静态⽅法中引⽤类属性的话,必须通过类对象来引⽤
    在这里插入图片描述在这里插入图片描述

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

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

相关文章

计算机网络【二】物理层基础知识

计算机网络的性能 速率:连接在计算机网络上的主机在数字信道上传送数据位数的速率,也成为data rate 或bit rate,单位是b/s,kb/s,Mb/s,Gb/s。 我们平时所讲的宽带的速度是以字为单位的,但是实际中应用一般显示的是字节 &#xff0…

Linux网络编程——tcp并发服务器(多进程)

https://blog.csdn.net/lianghe_work/article/details/46503895一、tcp并发服务器概述一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。二、…

求序列第K大算法总结

参考博客:传送门 在上面的博客中介绍了求序列第K大的几种算法,感觉收益良多,其中最精巧的还是利用快速排序的思想O(n)查询的算法。仔细学习以后我将其中的几个实现了一下。 解法 1: 将乱序数组从大到小进行排序然后取出前K大&a…

Linux网络编程——tcp并发服务器(多线程)

https://blog.csdn.net/lianghe_work/article/details/46504243tcp多线程并发服务器多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。据统计&a…

计算机网络【三】物理层数据通信

物理层传输媒介 导向传输媒体,比如光纤和铜线 双绞线(屏蔽双绞线STP 五屏蔽双绞线UTP)电线扭曲在一起可以降低互相之间的电磁干扰 同轴电缆 (50欧姆的基带同轴电缆,75欧姆的宽带同轴电缆) 10M和100M网络只使用了四根线&#xf…

02_算法分析

02_算法分析 0.1 算法的时间复杂度分析0.1.1 函数渐近增长概念:输入规模n>2时,算法A1的渐近增长小于算法B1 的渐近增长随着输入规模的增大,算法的常数操作可以忽略不计测试二:随着输入规模的增大,与最高次项相乘的常…

Linux网络编程——I/O复用之select详解

https://blog.csdn.net/lianghe_work/article/details/46506143一、I/O复用概述I/O复用概念:解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调I/O复用使用的场合:1.当客户处理多个描述符(…

Linux网络编程——tcp并发服务器(I/O复用之select)

https://blog.csdn.net/lianghe_work/article/details/46519633与多线程、多进程相比&#xff0c;I/O复用最大的优势是系统开销小&#xff0c;系统不需要建立新的进程或者线程&#xff0c;也不必维护这些线程和进程。代码示例&#xff1a;#include <stdio.h> #include &l…

操作系统【二】死锁问题以及处理方法

死锁的概念 死锁&#xff1a;在并发环境下&#xff0c;个进程因为竞争资源而造成的一种互相等待对方手里的资源&#xff0c;导致各进程都阻塞&#xff0c;无法向前推进的现象。 区别&#xff1a; 饥饿&#xff1a;由于长期得不到想要的资源进程无法向前推进的现象。死循环&a…

Linux网络编程——I/O复用之poll函数

https://blog.csdn.net/lianghe_work/article/details/46534029一、回顾前面的selectselect优点&#xff1a;目前几乎在所有的平台上支持&#xff0c;其良好跨平台支持也是它的一个优点select缺点&#xff1a;1.每次调用 select()&#xff0c;都需要把 fd 集合从用户态拷贝到内…

操作系统【一】进程同步和信号量

基本概念 进程异步性特征&#xff1a;各并发执行的进程以各自独立的&#xff0c;不可预知的速度向前推进。 进程同步又称作直接制约关系&#xff0c;他是指为完成某种任务而建立的两个或者多个进程&#xff0c;这些进程因为需要在某些位置上协调他们的工作顺序而产生的制约关…

计算机网络【四】数据链路层基本概念+点到点通信(PPP协议)

数据链路层基本概念 路由器是网络层设备 数据链路层&#xff1a;数据管道&#xff0c;传输的是数据包加上发送地址&#xff0c;接收地址&#xff0c;校验的数据帧 数据链路层的信道类型&#xff1a; 点到点信道&#xff1a;使用一对一的点到点通信方式&#xff08;两个设备…

Linux网络编程——tcp并发服务器(poll实现)

https://blog.csdn.net/lianghe_work/article/details/46535859想详细彻底地了解poll或看懂下面的代码请参考《Linux网络编程——I/O复用之poll函数》 代码&#xff1a;#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#…

Linux网络编程——I/O复用函数之epoll

https://blog.csdn.net/lianghe_work/article/details/46544567一、epoll概述epoll 是在 2.6 内核中提出的&#xff0c;是之前的 select() 和 poll() 的增强版本。相对于 select() 和 poll() 来说&#xff0c;epoll 更加灵活&#xff0c;没有描述符限制。epoll 使用一个文件描述…

操作系统【三】内存管理基础+连续内存分配

内存的基础知识 内存分为按字节编址&#xff08;8位&#xff09;和字编制&#xff08;不同计算机不一样&#xff0c;64位计算机就是64位&#xff0c;即8个字节&#xff09; 相对地址逻辑地址 绝对地址物理地址 从逻辑地址到物理地址的转换由装入解决。 装入的三种方式 绝对…

MSG_PEEK标志

https://blog.csdn.net/aspnet_lyc/article/details/28937229 MSG_PEEK标志可以用来读取套接字接收队列中可读的数据&#xff0c;一些情况会用到它&#xff0c;比如为了避免不阻塞而先检查套接字接收队列中可读的数据长度&#xff0c;再采取相应操作。当然&#xff0c;不阻塞也…

C++的单例模式与线程安全单例模式(懒汉/饿汉)

https://www.cnblogs.com/qiaoconglovelife/p/5851163.html1 教科书里的单例模式我们都很清楚一个简单的单例模式该怎样去实现&#xff1a;构造函数声明为private或protect防止被外部函数实例化&#xff0c;内部保存一个private static的类指针保存唯一的实例&#xff0c;实例的…

计算矩阵的逆和行列式的值(高斯消元+LU分解)

计算矩阵的逆 选主元的高斯消元法 朴素的高斯消元法是将矩阵A和单位矩阵放在一起&#xff0c;通过行操作&#xff08;或者列操作&#xff09;将A变为单位矩阵&#xff0c;这个时候单位矩阵就是矩阵A的逆矩阵。从上到下将A变为上三角矩阵的复杂度为O(n3n^3n3)&#xff0c;再从下…

Linux网络编程——tcp并发服务器(epoll实现)

https://blog.csdn.net/lianghe_work/article/details/46551871通过epoll实现tcp并发回执服务器&#xff08;客户端给服务器发啥&#xff0c;服务器就给客户端回啥&#xff09; 代码如下&#xff1a;#include <string.h>#include <stdio.h>#include <stdlib.h&g…