一.面向对象编程几个特征(封装, 继承,多态)

1.封装:类里面封装函数和变量, 在将类进行实例化成实例对象时进行传参, 从而生成不同的实例对象,增加代码的复用.
2.继承:子类可以继承父类的方法和属性.
3.多态建立在继承的基础之上, 先有继承 才能有多态, 指子类继承父类后分别重写覆盖了父类方法.即父类的同一个方法, 在不同的子类当中表现出不同的形式

二.类对象

  由python解释器根据class代码自动生成的一个对象, 由所有的实例对象共享

三.__new__()方法的作用

  用于创建新的实例对象, 当需要创建实例对象时自动执行

四.__init__()方法的作用

  在__new__()方法创建出来了实例对象后, 就会调用 __init__()方法, 对这个已经实例化的对象进行属性的初始化

五.单例模式的实现:(通过重写__new__()实现单例模式) 

class Item(object):

    __instance = None # 定义一个类属性
 
def __new__(cls, *args, **kwargs): # 重写父类的__new__()方法, cls 指代当前类对象本身, __new__()是一个类方法
if not cls.__instance: # 如果__instance类属性没有进行赋值, 就调用父类的__new__()方法创建一个实例化的对象,并赋值给 __instance
cls.__instance = object.__new__(cls)
return cls.__instance # 将该实例对象进行返回, 如果__instance已经被赋值了, 就返回已经存在的__instance所指向的实例对象,从而实现单例 obj = Item()
print(id(obj)) obj2 = Item()
print(id(obj2))

进行输出, 发现虽然进行了两次类的实例化, 但是他们的内存id是一样的, 可以证明得到的是同一个实例对象, 单例需求得到实现:

4449800144
4449800144

注意:

1.只重写父类的__new__()方法实现单例的缺陷:

仍然可以通过调用__init__()方法, 修改已经初始化的属性, 如果需要设置初始化的属性也不可以修改, 需要改造__init__()方法:

class Item(object):

    __instance = None
__flag = False def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance def __init__(self, name): # self 指向所实例化的对象本身
if not self.__flag:
self.name = name
self.__flag = True
obj = Item("lowman")
print(obj.name) obj2 = Item("isbusy")
print(obj2.name)

输出:

lowman
lowman

第二次重新赋值没有生效, 需求实现

六.python2 与python3 调用父类方法(使用super()方法调用父类方法更加节省资源)

  在子类的方法中直接使用super()调用父类的方法即可

  python3: super().__init__(*args, **kwargs)

  python2: super("当前类名", self).__init__(*args, **kwargs)

    

Python 面向对象编程的一些特征 及 单例模式的实现, 父类方法的调用(python2/python3)的更多相关文章

  1. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  2. python 面向对象编程(一)

    一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...

  3. Python面向对象编程指南

    Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...

  4. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  5. Python面向对象编程(下)

    本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...

  6. Python 面向对象编程——访问限制

    <无访问限制的对象> 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑.但是,从前面Student类的定义来看(见:Py ...

  7. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  8. Python 面向对象编程基础

    Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...

  9. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

随机推荐

  1. Newtonsoft.Json自动升级版本号,导致dll冲突

    不知道怎么回事,vs偶尔会自动升级Newtonsoft.Json.dll的版本号,但是又不升级dll,仅仅是版本号变了,实际引用的dll还是原来的. 我用的是6.0.0的,然后版本号升级成了7.0.0 ...

  2. 前后台交互(打开前端页面,不传递任何数据,发送ajax请求)

    1.打开前端,不传递任何数据 <script src="./jquery.min.js"></script> <script> $(docume ...

  3. centos 安装或更新最新版本软件包(git python etc)的方法 SCL IUS

    使用centos 经常发现官方提供的软件包版本过低,很多时候大家会选择下载源码自行编译,带来了很多麻烦. centos安装最新版本软件包,例如git,python等,可以通过红帽官方提供的softwa ...

  4. jstl $前 出现 空格 ,可能出现无法解析的 情况

    <c:if test="${sessionScope.contactName == null || sessionScope.contactName==''}"> 能正 ...

  5. url地址 参数 带 参数 注意事项 , chain , redirect , redirectAction

    当 url  地址中含有  参数 时 ,若参数值是一个 含有 参数的 地址时 , 应警惕 ,如 index/goIndex!login?backUrl=/shop/goShop!go?a1=1& ...

  6. 系统调用方式文件编程-open

    通过Linux系统调用函数编写应用程序,该应用程序实现文件的复制功能 文件描述符--在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配. 1.打开文件--open 头文件:#inc ...

  7. 【httpclient-4.3.1.jar】httpclient发送get、post请求以及携带数据上传文件

    1.发送get.post携带参数以及post请求接受JSON数据: package cn.qlq.utils; import java.io.BufferedReader; import java.i ...

  8. 20145226夏艺华 《Java程序设计》第8周学习总结

    教材学习内容总结 学习目标 了解NIO 会使用Channel.Buffer与NIO2 会使用日志API.国际化 会使用正则表达式 了解JDK8增强功能 第14章 NIO与NIO2 14.1 认识NIO ...

  9. 2018.06.29 NOIP模拟 边的处理(分治+dp)

    边的处理(side.cpp) [问题描述] 有一个 n 个点的无向图,给出 m 条边,每条边的信息形如<x,y,c,r><x,y,c,r><x,y,c,r>. 给出 ...

  10. PHP二个高精确度数字相加减

    1.相加 string bcadd(string left operand, string right operand, int [scale]); 2.相减 string bcsub(string ...