- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python基础学习之类与实例基本用法与注意事项详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了python基础学习之类与实例基本用法与注意事项。分享给大家供大家参考,具体如下:
前言 。
和其他编程语言相比,python用非常少的新语法和语义将类加入到语言中。python的类提供了面向对象编程的所有标准特性:类继承机制允许多个基类,派生类可以覆盖它基类的任何方法,一个方法可以调用基类中相同名称的的方法。对象可以包含任意数量和类型的数据。和模块一样,类也拥有python天然的动态特性:它们在运行时创建,可以在创建后修改.
python的类 。
python类实例时,先调用__new__方法,返回该类的实例对象,这个实例对象就是__init__方法的第一个参数self,即self是__new__的返回值 。
(1)类的访问控制:
①默认:python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.
②私有:在python中定义私有变量只需要在变量名或函数名前加上”__“两个下划线,那么这个函数或变量就是私有的了 。
原理:在内部,python使用一种name mangling技术,将__membername替换成_classname__membername,也就是说,类的内部定义中,所有以双下划线开始的名字都被"翻译"成前面加上单下划线和类名的形式.
例如:为了保证不能在class之外访问私有变量,python会在类的内部自动的把我们定义的__spam私有变量的名字替换成为_classname__spam(注意,classname前面是一个下划线,spam前是两个下划线),因此,用户在外部访问__spam的时候就会提示找不到相应的变量.
注:python中的私有变量和私有方法仍然是可以访问的;访问方法如下:
私有变量:实例._类名__变量名 。
私有方法:实例._类名__方法名() 。
(2)python类和类成员的私有化支持
其实,python并没有真正的私有化支持,但可用下划线得到伪私有。所以一般需要统一规范:
① _xxx:"单下划线" 开始的成员变量叫做保护变量(protected),意思是只有类实例和子类实例能访问到这些变量, 。
需通过类提供的接口进行访问;不能用'from <module> import *'导入,
② __xxx:类中的私有变量/方法名(python的函数也是对象,所以成员方法称为成员变量也行得通).
" 双下划线 "开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据,
③ __xxx__系统定义名字,前后均有一个“双下划线”代表python里特殊方法专用的标识,如__init__()代表类的构造函数,
注:python派生类可以与父类同名,因此这种情况可以使用私有变量
1
2
3
4
5
6
7
8
9
10
|
class
a():
def
__init__(
self
):
self
.__name
=
'python'
#翻译成self._a__name='python'
class
b(a):
def
func(
self
):
print
self
.__name
#翻译成print self._b__name
instance
=
b()
#instance.func()#报错:attributeerror: b instance has no attribute '_b__name'
print
instance.__dict__
print
instance._a__name
|
输出结果:
{'_a__name': 'python'} python 。
注:当b类取名a时,则instance.func()可以直接调用 。
(3)python类的继承:
python类和其他oop语言一样,都可以使用继承功能,也同样不允许多继承,但可以通过多级继承来实现.
(1)继承方法:派生类的类名的()里面写入父类的类名,
(2)构造函数:子类中构造函数加上super(子类,self).__init__(参数1,参数2,….),
(3)实例化顺序:实例化对象c---->c调用子类__init__()---->子类__init__()继承父类__init__()----->调用父类__init__(),
(4)判断继承的函数:isinstance()及issubclass(),其中isinstance()用于检查实例类型;issubclass()用于检查类继承,
(5)方法重写:子类中定义与父类同名的方法,子类实例调用时就会使用重写的方法,
(6)子类重写构造函数:子类构造函数中不使用super调用父类即可,
(7)多态:当子类和父类都存在相同名字的方法时,子类的方法覆盖了父类的方法,在代码运行时,会调用子类的方法,
注:多态实现了开发-封闭原则:
①对扩展开放(open for extension):允许子类重写方法函数; ②对修改封闭(closed for modification):不重写,直接继承父类方法函数,
python类的其他知识 。
(1)python中self和cls的区别:
① self表示一个具体的实例本身,相当于php的this。如果用了staticmethod,那么就可以无视这个self,将这个方法当成一个普通的函数使用,
② cls表示这个类本身,
@staticmethod:只能用类名去调用的方法; @classmethod:既能用实例去调用,也能用类名去调用的方法; 。
(2)多重继承的方法搜索顺序:
对于多数应用来说,在最简单的情况下,你可以认为搜索从父类所继承属性的操作是深度优先、从左至右的,当层次结构中存在重叠时不会在同一个类中搜索两次。 因此,如果某一属性在 derivedclassname 中未找到,则会到 base1 中搜索它,然后(递归地)到 base1 的基类中搜索,如果在那里未找到,再到 base2 中搜索,依此类推.
真实情况比这个更复杂一些;方法解析顺序会动态改变以支持对 super() 的协同调用。 这种方式在某些其他多重继承型语言中被称为后续方法调用,它比单继承型语言中的 super 调用更强大.
动态改变顺序是有必要的,因为所有多重继承的情况都会显示出一个或更多的菱形关联(即至少有一个父类可通过多条路径被最底层类所访问)。 例如,所有类都是继承自 object,因此任何多重继承的情况都提供了一条以上的路径可以通向 object。 为了确保基类不会被访问一次以上,动态算法会用一种特殊方式将搜索顺序线性化, 保留每个类所指定的从左至右的顺序,只调用每个父类一次,并且保持单调(即一个类可以被子类化而不影响其父类的优先顺序).
希望本文所述对大家python程序设计有所帮助.
原文链接:https://blog.csdn.net/dream_successor/article/details/89228655 。
最后此篇关于Python基础学习之类与实例基本用法与注意事项详解的文章就讲到这里了,如果你想了解更多关于Python基础学习之类与实例基本用法与注意事项详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
全称“Java Virtual Machine statistics monitoring tool”(statistics 统计;monitoring 监控;tool 工具) 用于监控虚拟机的各种运
主要是讲下Mongodb的索引的查看、创建、删除、类型说明,还有就是Explain执行计划的解释说明。 可以转载,但请注明出处。  
1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发。 2>循环服务器和并发服务器
详解 linux中的关机和重启命令 一 shutdown命令 shutdown [选项] 时间 选项: ?
首先,将json串转为一个JObject对象: ? 1
matplotlib官网 matplotlib库默认英文字体 添加黑体(‘SimHei')为绘图字体 代码: plt.rcParams['font.sans-serif']=['SimHei'
在并发编程中,synchronized关键字是常出现的角色。之前我们都称呼synchronized关键字为重量锁,但是在jdk1.6中对synchronized进行了优化,引入了偏向锁、轻量锁。本篇
一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象。  
实例如下: ? 1
1. MemoryCahe NetCore中的缓存和System.Runtime.Caching很相似,但是在功能上做了增强,缓存的key支持object类型;提供了泛型支持;可以读缓存和单个缓存
argument是javascript中函数的一个特殊参数,例如下文,利用argument访问函数参数,判断函数是否执行 复制代码 代码如下: <script
一不小心装了一个Redis服务,开了一个全网的默认端口,一开始以为这台服务器没有公网ip,结果发现之后悔之莫及啊 某天发现cpu load高的出奇,发现一个minerd进程 占了大量cpu,googl
今天写这个是为了 提醒自己 编程过程 不仅要有逻辑 思想 还有要规范 代码 这样可读性 1、PHP 编程规范与编码习惯最主要的有以下几点: 1 文件说明 2 funct
摘要:虚拟机安装时一般都采用最小化安装,默认没有lspci工具。一台测试虚拟网卡性能的虚拟机,需要lspci工具来查看网卡的类型。本文描述了在一个虚拟机中安装lspci工具的具体步骤。 由于要测试
1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统
目录 算术运算符 基本四则运算符 增量赋值运算符 自增/自减运算符 关系运算符 逻
如下所示: ? 1
MapperScannerConfigurer之sqlSessionFactory注入方式讲解 首先,Mybatis中的有一段配置非常方便,省去我们去写DaoImpl(Dao层实现类)的时间,这个
Linux的网络虚拟化是LXC项目中的一个子项目,LXC包括文件系统虚拟化,进程空间虚拟化,用户虚拟化,网络虚拟化,等等,这里使用LXC的网络虚拟化来模拟多个网络环境。 本文从基本的网络设备讲
? 1
我是一名优秀的程序员,十分优秀!